View on GitHub

Cycle263 Blog

Stay hungry, stay foolish.

react-redux

redux本身是个非常纯粹的状态管理库,需要通过react-redux这个库的帮助来管理react的状态。Redux中dispatch触发store tree中state变化,并不会导致React重新渲染。react-redux才是真正触发React重新渲染的模块。

React-Redux是Redux 的作者封装了一个 React 专用的库。React-Redux 将所有组件分成两大类:UI 组件(presentational component)和容器组件(container component)。

React-Redux 规定,所有的 UI 组件都由用户提供,容器组件则是由 React-Redux 自动生成。也就是说,用户负责视觉层,状态管理则是全部交给它。

常见概念

  ----------              ---------    -----------
  | provider | - context -> | connect | -> | component | -> store/state 的单向数据流转
  ----------              ---------    -----------

Provider的原理是React组件的context属性,getChildContext传递给子组件对应属性。注意:如果 contextTypes 没有定义,context 将是一个空对象。

```js
// Provider的唯一功能就是传入store对象。
class Provider extends Component {
  getChildContext() {
    return {
      store: this.props.store
    };
  }
  render() {
    return this.props.children;
  }
}

Provider.childContextTypes = {
  store: React.PropTypes.object
}


// 使用Provider
let store = createStore(todoApp);

render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
)
```

案例

  import { connect } from 'react-redux'

  const VisibleTodoList = connect(
    mapStateToProps,
    mapDispatchToProps
  )(TodoList)

参考资料

react-redux Connect方法