mapStateToProps和属性不是来自商店

时间:2016-03-08 18:55:39

标签: reactjs redux react-redux

mapStateToProps中包含非来自商店的属性是不是一个好主意?

e.g。

const fooBar = () => 'foobar!'

const mapStateToProps = (state) => {
  return {
    todos: getVisibleTodos(state.todos, state.visibilityFilter),
    fooBar
  }
}

1 个答案:

答案 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
  }
}