reacthooks和vue3都没有使用状态管理工具来实现全局响应响应。但是,使用这些工具一般有一个所谓的bestpractice原则,就是不会用就不要用。也就是说,除非有些功能不使用无法优雅实现,否则最好不要使用。你怎么理解这个?比如我们做一个简单的网站全局中英文切换。一般情况下,语言类型变量是全局定义的,可以在站点的header组件上切换。那么组件结构可能是:
{state.name}</div>根组件改变状态 )}exportdefaultApp//HelloWorld.tsximportReact,{useContext,FC,Dispatch,SetStateAction}from'react';import{stateContext,setStateContext}from'../App'constHelloWorld:FC=()=>{conststate=useContext<{name:number}>(stateContext)常量setState=useContext>|undefined>(setStateContext)constchangeState=()=>{if(setState){//这里传递函数参数,实现后代组件的全局状态修改setState(state=>{return{...state,name:222}})}}return(后代组件改变全局状态值 )}exportdefaultHelloWorld2.vue3的provide/inject其实就是文档中也提到了vue3的方法。同样,需要修改的数据及其修改方法通过provide传递,比React的操作更加简洁://App.vue //HelloWorld.vue
{{d}}结论这两个操作我觉得很舒服,推荐。在一定程度上,它们可以替代一些状态管理工具的能力。至于react的低版本,vue2能不能实现,我尝试的结果是暂时不能实现,有兴趣的兄弟可以试试。如果实现了,可以在评论区指出,贴上关键代码。这里所谓的“实现”与上面两种方案类似。它不仅全局定义状态,而且上层的修改可以响应下层,下层也可以修改并响应上层。
{state.name}
{{data}}
{{d}}结论这两个操作我觉得很舒服,推荐。在一定程度上,它们可以替代一些状态管理工具的能力。至于react的低版本,vue2能不能实现,我尝试的结果是暂时不能实现,有兴趣的兄弟可以试试。如果实现了,可以在评论区指出,贴上关键代码。这里所谓的“实现”与上面两种方案类似。它不仅全局定义状态,而且上层的修改可以响应下层,下层也可以修改并响应上层。