useContext+useReducer
1 .自带的最简单的跨组件共享状态方式
2 .缺点:需要创建Context并且挂载Provider,需要自己管理Context
3 .context数据是一个整体,不能做到精确杀星,一旦改变,就会自动触发刷新
function Foo() {
const { state: { foo } } = useContext(Context);
// ...
}
function Bar() {
const { state: { bar } } = useContext(Context);
// ...
}
Foo中调用disptch对state.foo进行修改,Bar也会刷新
unstated-next
1 .https://github.com/jamiebuilds/unstated-next/blob/master/README-zh-cn.md
UmiJs中提供的useModel
1 .UmiJS中提供了一个useModel方法,可以很方便的将hooks全局使用,它的默认规则是src/models下导出的hooks会作用于全局,缺点是只能在UmiJs框架
2 .以上的都是基于react的数据管理,无法左到精确刷新,只是数据的简单管理,不包含常见的异步数据处理
不基于React的数据流实现
1 .不基于React的数据流实现就是数据没有存储在React里面,数据改变不会直接触发组件刷新,而是通过其他的方式触发组件重新渲染,
2 .React-redux通过useSelector会精确刷新,不会像context一样导致整体刷新,因为useSelector的重新渲染时自己控制的,而不是交给react处理
总结
1 .如果仅仅是为了全局数据共享,方法很多,但是就思想而言,还是redux的思想更加重要,其实最关键的并不是为了让数据全局共享,而是可以保证数据的流动符合预期.一个很简单的项目已经出现了不是到哪个函数偷偷的改变了数据.做了setState操作
网友评论