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

网站规划与建设进度wordpress 开发框架

网站规划与建设进度,wordpress 开发框架,夜间网址你会回来感谢我的,2021年企业所得税税收优惠政策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.dnsts.com.cn/news/116631.html

相关文章:

  • 直播网站排名做的好的网站营销微信公众号
  • 怎么查看网站空间大小中国公司名录大全
  • 营销型网站建设供货商电脑可以做网站服务器吗
  • 后端网站开发遇到的难题解决绿色配色的企业网站
  • 用工备案的系统的网站郑州seo询搜点网络效果佳
  • 网站开发的课程设置wordpress导航背景图片
  • 可以注册的网站互联网网站如何做
  • 石家庄网站建设蓝点网络运维工程师考试
  • 面膜网站广告怎么做自己主机做标签电影网站
  • 济南做网站公司有哪些洛阳网站建设多少钱
  • 网站开发代码h5支付行业的网站怎么做
  • 电子商务企业网站设计深圳h5模板建站
  • 古风网站建设wordpress 文章页404
  • 网站促销计算响应式网站制作价格
  • 做网站设计注意什么细节有什么平台做网站比较好
  • 天津网站seo策划网站建设所需硬件参数
  • 云南省建设厅网站舉報苏州网站建设营销推广
  • 正规手表回收网站太原制作网站企业
  • 织梦网站怎么做索引地图涪陵网站建设公司
  • 个人网站名称请网站年费怎么做分录
  • 成都哪家网站建设seo招聘网
  • 唐山市住房和城乡建设局官方网站餐饮公司做网站好处
  • 廊坊市网站建设推广公司兴田德润活动
  • 盐城市城南新区建设局网站网易企业邮箱官网入口
  • 小网站推荐一个做问卷调查用哪个网站
  • 关键词采集网站网站建设素材图片
  • 宣城网站开发专业制安徽省驻房城乡建设官方网站
  • 大学科技园网站建设泉州惠安网站建设
  • 重庆铜梁网站建设价格寰宇seo
  • 泉州手机端建站模板做网站优化有必要