redux 子组件如何获取 bindActionCreators方法绑定的 action?

//import省略

const store = applyMiddleware(ReduxThunk)(createStore)(reducers);

const App = connect(
    state => (state),
    dispatch => ({
        action: bindActionCreators(actions, dispatch)
    })
)(Component);

const mountPoint = document.createElement('div');
mountPoint.setAttribute('id', 'root');
document.body.appendChild(mountPoint);

render(
    <Provider store={store}>
        <App />
    </Provider>,
    mountPoint
);

我知道子组件可以通过设置contextTypes来获取store,但是store里面只有dispatch、getState等方法,并没有bindActionCreators处理过的action。
这导致我在子组件中,又要重新用dispatch去发起更新state请求

我猜测原因时 action 在 App 组件上而不在 Provider 上。
所以子组件想要通过context获取action必须在App组件里设置childContextTypes吗?

我听说redux对react的context有封装,如果自己在App组件中写childContextTypes,是不是脱离了redux了?

阅读 2.7k
2 个回答

在 react 中应用 redux 应该遵守容器组件、UI 组件的分层设计模式(react-redux)。
如果你在子组件里面有调用 action 的需求,那么一种是父组件通过 props 传递 action 到子组件,还有一种就是创建一个子组件的容器组件,在容器组件中通过 mapDispatchToProps 来绑定 actions
遵循这种设计模式让分层更加清晰、降低耦合,有利于重用和单元测试。
好的分层设计有利于测试,请看这篇:https://segmentfault.com/a/1190000015935519

this.props.action.<actionName>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏