state 只是一个单纯的 js 对象. 这个好多人搞不明白. Redux 构架之下, 组件可以基本没有自己的state, 对应部分都在 state 对象树中, 组件也没有自己的方法,方法也是有 Redux管理. js 中,函数式传名赋值的, 组件没有自己定义的方法, 这其实就是词法作用域, 因为 action 是定义在 Redux中的, 组件只是引用了函数.
Redux 的容器之说从何而来, 是由于 connect 的存在, connect 可以选择性的映射,通过mapStateToProps 选择 state 树的一部分 注入到组件中, 这个地方其实就是去毛的过程.
Redux 的方法也是通过 类似的传递了 disptch 方法的引用.
你想象在用一个遥控器, 你按键时, 并没直接作用于电路, 工作的电路(操作方法)是在电视里.
不知道你们见过有画中画功能的电视 ,就是一个小画面显示的图像和大画面不同, 实际上就是选择性投射到小屏幕上.
很多人认为, 组件为了操作自身的状态,要点击自己的方法,然后在 Redux里转一圈,改变了 state,然后再返回组件 . 真是多此一举, 其实是组件自己根本没有操作自己的函数和 state, 操作的都是 Redux 的方法和 state. 这才是真正的单向数据流动.
组件需要引用或者映射一部分 state,以及 dispatch 方法. 这才有 container .
state本身并不是一个容器