两年没写代码, 之前用过 React, 但没(经常)用 hooks.
最近看了下文档, 遇到几个问题, 比如, 外部的数据(redux)变化如何让组件 rerender?
如果是我去实现 connect, 我会写成一个 HOC, 添加一个 listener 监听 state 变化, 当发生变化, 手动调用 forceUpdate
.
但看了下现在 connect 源码, 没太看懂, 看到是用 Context 实现的, 但具体逻辑有几个问题:
如果是 Context
实现, 那外层应该是一个 Context.Provider
, connect
应该是对 Consumer
的封装, 但发现还是用 Provider 的封装. 一个项目成千上万的小组件使用了 connect, 那就会有成千上万个 Provider
, 逻辑岂不很混乱?
现在的实现(pseudocode):
function connect(mapStateToProps, mapDispatchtoProps...) {
// some logic1
return function(Component) {
// some logic2
return <Component {...props} />
}
}
使用的时候需要 connect(mapState, mapProps)(Component)
.
为什么不实现成这样(pseudocode):
function connect(Component, mapStateToProps, mapDispatchtoProps...) {
// some logic with mapState and mapDispatch
return <Component {...props} />
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.