Liuyll
Liuyll
> ``` > interface StringMap { > [key: string]: string; > } > interface A { > key?: string; > } > > type B = { > key?: string;...
> 之所以使用 notify 的方式做通知,主要是为了实现[选择性订阅](https://reto.js.org/#/zh-cn/advanced?id=%E9%80%89%E6%8B%A9%E6%80%A7%E8%AE%A2%E9%98%85),而且这其实是底层的逻辑,用户完全无感知的~ > > 至于心智负担,其实并不会增加太多(当然不同人感受会有不同),不过“子组件需要做好充足的缓存才能应付更新”这一点我其实没有太理解。。愿闻其详 不好意思,代码很久之前拉的,没发现已经更新这么多了。。 我是指B作为A的子组件,C作为B的子组件直接useContext,那么A组件引发的B组件更新势必会影响C组件重渲染,即使C组件并没有依赖B组件需要更新的内容,需要很小心的维持依赖关系。 当然实际情况肯定更加复杂,而且这种状态库无法维持最小依赖,显然这不是reto才存在的问题。有没有想过用类似useObserver之类的对组件做层memo,不过用户需要配合这种额外的工作。 事实上,zustand这样成熟的状态库也存在hooks的通病,所谓心智负担不是独立开发时出现的,而是团队开发时不遵从一致的hooks约定导致的。真实情况当然很复杂,像官方不提倡的useEventCallback就是解决这种问题的产物。 当然reto写的很好,毋庸置疑
pureComponent和AsyncComponent有共同的东西,这个共同的东西不能污染到Component,所以添加了中间继承类ComponentDummy,_assign的解析有问题,后面的React已经修改为Object.assign,所以Component上并没有融合的render函数