react-todo衍生思考

to-do 进阶

理解UI更新条件!
组件的state或者props改变!
代码详见 https://github.com/Firenzia/react-demo

版本1 最原始

  • 组件自己管理数据和逻辑
  • 手动setState修改组件内部状态更新UI

版本2 使用store

  • 组件内引入全局store
  • 数据管理放在store
  • 逻辑操作在组件内定义方法,调用store派发action, 更新store的数据
  • 订阅store的改变同步更新到组件state,store.subscribe(this.handleStoreChange),函数体this.setState(store.getState())

缺点:组件内部要处理逻辑,显式引入store,和订阅store状态变更的回调更新组件内部state再重新render显得不优雅

版本3 react-redux 引入容器组件

  • 组件定义为UI组件,不处理逻辑
  • 不显式引入store,使用react-redux的connect方法,将store中的state和派发action的相关逻辑注入到UI组件中,组件内部通过this.props获取这些数据和方法,
    最后被包装成容器组件,对外暴露。
  • store数据改变,导致props改变,所以组件刷新
  • 依赖注入的设计思想

优点:UI和逻辑分离