在mapStateToProps
中包含非来自商店的属性是不是一个好主意?
e.g。
const fooBar = () => 'foobar!'
const mapStateToProps = (state) => {
return {
todos: getVisibleTodos(state.todos, state.visibilityFilter),
fooBar
}
}
答案 0 :(得分:2)
是的,这是一个可接受的用例 - 但是,我们可能能够更清洁地实现此功能。例如,mapStateToProps
中的react-redux
接受第二个参数,标题为ownProps
,这是传递给相关容器组件的道具:
通过https://github.com/reactjs/react-redux/blob/master/docs/api.md
[mapStateToProps(state, [ownProps]): stateProps]
(功能): ...如果将ownProps指定为第二个参数,则其值将为 传递给组件的props,将重新调用mapStateToProps 每当组件收到新道具时。
所以也许不是在容器组件中实例化fooBar
,为什么不将它作为prop传递给组件本身,然后通过ownProps
访问它?
其他一些组件
<MyContainer fooBar={() => alert('foobar!')}
<强> myContainer中强>
const mapStateToProps = (state, ownProps) => {
return {
todos: getVisibleTodos(state.todos, state.visibilityFilter),
fooBar: ownProps.fooBar
}
}