两年没写代码, 之前用过 React, 但没(经常)用 hooks.
最近看了下文档, 遇到几个问题, 比如, 外部的数据(redux)变化如何让组件 rerender?
如果是我去实现 connect, 我会写成一个 HOC, 添加一个 listener 监听 state 变化, 当发生变化, 手动调用 forceUpdate.
但看了下现在 connect 源码, 没太看懂, 看到是用 Context 实现的, 但具体逻辑有几个问题:
1 具体实现方式
如果是 Context 实现, 那外层应该是一个 Context.Provider, connect 应该是对 Consumer 的封装, 但发现还是用 Provider 的封装. 一个项目成千上万的小组件使用了 connect, 那就会有成千上万个 Provider, 逻辑岂不很混乱?
2 为什么不写成 connect(Component, mapStateToProps, mapDispatchtoProps)?
现在的实现(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} />
}