当前位置: 首页 > news >正文

使用阿里云建网站绵阳优化网站排名

使用阿里云建网站,绵阳优化网站排名,网页设计html代码大全继承关系,广州网站开发制作useReducer和useContext前面有单独介绍过#xff0c;上手不难#xff0c;现在我们把这两个api结合起来使用#xff0c;该怎么用#xff1f;还是结合之前的简易增删改查的demo#xff0c;熟悉vue的应该可以看出#xff0c;useReducer类似于vuex#xff0c;useContext类似…useReducer和useContext前面有单独介绍过上手不难现在我们把这两个api结合起来使用该怎么用还是结合之前的简易增删改查的demo熟悉vue的应该可以看出useReducer类似于vuexuseContext类似于vue中的inject和provided,来分析下思路。 实现效果 代码实现 文件拆解 组件入口文件 - index.js import { TasksContext, TasksDispatchContext } from ./context; import { useReducer } from react; import { initialTasks } from ./taskLists; import { taskReucers } from ./tasksReducer; import AddTask from ./AddTask; import TaskList from ./TaskList; function State() {const [tasks, dispatch] useReducer(taskReucers, initialTasks);return (TasksContext.Provider value{tasks}TasksDispatchContext.Provider value{dispatch}AddTask /TaskList //TasksDispatchContext.Provider/TasksContext.Provider); }export default State;AddTask.js import { useState, useContext } from react; import { TasksDispatchContext } from ./context; let nextId 3;function AddTask() {let [msg, setMsg] useState();const dispatch useContext(TasksDispatchContext);const handleSubmit () {if (!msg) return;setMsg();dispatch({type: added,task: {id: nextId,text: msg,done: false,},});};const handleChange (e) {setMsg(e.target.value);};return (input typetext value{msg} onChange{handleChange} /button onClick{handleSubmit}添加/button/); }export default AddTask; context.js文件 import { createContext } from react;export const TasksContext createContext(null); export const TasksDispatchContext createContext(null);taskReucers.js export function taskReucers(state [], action) {switch (action.type) {case added:return [...state, action.task];case changed:return state.map((task) {if (task.id action.task.id) {return action.task;} else return task;});case deleted:return state.filter((task) task.id ! action.task.id);default:throw new Error(Action type not found);} }taskListsData.js export const initialTasks [{ id: 0, text: Philosopher’s Path, done: true },{ id: 1, text: Visit the temple, done: false },{ id: 2, text: Drink matcha, done: false }, ];TaskList.js import { useState, useContext } from react; import Task from ./Task; import { TasksContext } from ./context;function TaskList() {const [isEdit, setIsEdit] useState(false);const tasks useContext(TasksContext);const handleChangeValue (value) {};return (ul{tasks.map((task) {return Task key{task.id} task{task} /;})}/ul); }export default TaskList;Task.js import { useState, useContext } from react; import { TasksDispatchContext } from ./context; function Task({ task }) {const [isEdit, setIsEdit] useState(false);const dispatch useContext(TasksDispatchContext);let todoContent ;function handleChangeText(e) {dispatch({ type: changed, task: { id: task.id, text: e.target.value } });}function handleDeleteTask(id) {dispatch({ type: deleted, task: { id } });}if (isEdit) {todoContent (spaninput typetext value{task.text} onChange{handleChangeText} /button onClick{() setIsEdit(false)}完成/button/span);} else {todoContent (spanspan{task.text}/spanbutton onClick{() setIsEdit(true)}编辑/button/span);}return (li{todoContent}button onClick{() handleDeleteTask(task.id)}删除/button/li); }export default Task;这样拆解后明显的业务更加清晰容易维护了给后续接手的人一目了然的理解思路。 没有了组件层级之间的繁琐的层层传递数据和方法代码结构也很清晰了。 进一步的优化业务代码 context.js的封装 import { createContext, useReducer } from react; import { initialTasks } from ./taskListsData; import { taskReucers } from ./tasksReducer;export const TasksContext createContext(null); export const TasksDispatchContext createContext(null);export default function TasksProvider({ children }) {const [tasks, dispatch] useReducer(taskReucers, initialTasks);return (TasksContext.Provider value{tasks}TasksDispatchContext.Provider value{dispatch}{children}/TasksDispatchContext.Provider/TasksContext.Provider); }入口文件index.js的优化 import AddTask from ./AddTask; import TaskList from ./TaskList; import TasksProvider from ./context; function State() {return (TasksProviderAddTask /TaskList //TasksProvider); }export default State;这样实现了同样的效果代码更加精简。
http://www.hkea.cn/news/14460972/

相关文章:

  • 深圳市城乡住房和建设局网站首页门户网站开发模板
  • 做网站源码要给客户嘛上海搬家公司收费
  • 怎样给网站做外链长沙速马科技
  • 宿迁建设局质安站网站免费制作海报
  • 天津高端模板建站cms开发教程
  • 免费建站个人网站北京食药局网站年检怎么做
  • 高端的网站优化公司鹤壁建设网站推广公司电话
  • 做房产中介网站重庆企业网站seo
  • 追波设计网站东莞专业网站推广多少钱
  • 网站 设计 语言山东省住房城乡建设厅查询网站首页
  • iis7如何设置ip做网站网页游戏传奇世界网页版
  • 用cms创建自己带数据库的网站和在本机搭建网站运行平台的心得体会店名注册查询官网
  • 上传网站过程餐厅网站设计模板下载
  • 手机网站建设公司联系电话app开发人员网站
  • 营销型网站制作培训陕西网站推广费用
  • wordpress地址怎么改seo是哪里
  • 网站规划小结网站的数据库怎么做
  • wordpress代理管理多站点梅州免费建站
  • 廉洁广州在线网站建设看板娘 wordpress
  • 网站排名优化策划wordpress主题安装失败进不了后台
  • 装饰装修网站模板建设俄罗斯国际空间站
  • 烟台网站公司网站建立
  • 房产中介网站怎么做网站开发综合实训心得
  • 网站建设服务费合同保定电子商务网站建设
  • 宽甸县建设局网站网站二级域名怎么做
  • 辽源网站建设招聘门户
  • 什么网站做详情页好网站电脑版和手机版区别
  • 芜湖做网站都有哪些企管宝官网
  • 网站建设平台ui确认书wordpress 页面目录
  • 北京网站建设公司分享网站改版注意事项贵州省住房城乡建设部网站