【发布时间】:2018-10-04 06:33:33
【问题描述】:
react-redux 中 connect 函数的 mapStateToProps 和 mapDispatchToProps 参数有什么区别?
【问题讨论】:
标签: reactjs redux react-redux mapstatetoprops mapdispatchtoprops
react-redux 中 connect 函数的 mapStateToProps 和 mapDispatchToProps 参数有什么区别?
【问题讨论】:
标签: reactjs redux react-redux mapstatetoprops mapdispatchtoprops
mapStateToProps 是用于向组件提供存储数据的函数,而mapDispatchToProps 是用于将动作创建者作为道具提供给组件的函数。
根据文档:
如果指定了
mapStateToProps参数,新组件将 订阅 Redux 商店更新。这意味着任何时候商店 更新后,mapStateToProps将被调用。结果mapStateToProps必须是普通对象,将被合并到 组件的 props。通过
mapDispatchToProps,每个动作创建者都被封装到一个调度中 调用所以它们可以被直接调用,将被合并到 组件的 props。
一个简单的例子是
function mapStateToProps(state) {
return { todos: state.todos }
}
function mapDispatchToProps(dispatch) {
return { addTodo: bindActionCreators(addTodo, dispatch) }
}
export default connect(mapStateToProps, mapDispatchToProps)(Todos);
【讨论】:
简单来说,
mapStateToProps:将redux状态连接到react组件的props。
mapDispatchToProps:将 redux 动作连接到 react props。
一个非常简单的例子:(我希望你明白我的意思)
// state
const mapStateToProps = state => {
return { lists: state.lists };
};
// props
const mapDispatchToProps = ({ lists }) => (
<ul>
{
lists.map(el => (
<li key={ el.id }>
{ el.heading }
</li>
)
}
</ul>
);
// Now, connect state to prop
const List = connect(mapStateToProps)(mapDispatchToProps);
【讨论】:
简单来说:
mapStateToProps 在您想从组件中获取全局状态的值时调用
function mapStateToProps(state) {
return {
message: state.message
};
}
全局状态的值只有在动作的帮助下才会改变。所以如果你想改变全局状态的值,你需要一个动作。 mapDispatchToProps 用于绑定组件中的操作。
【讨论】: