【问题标题】:mapStateToProps and properties not coming from the storesmapStateToProps 和属性不是来自商店
【发布时间】:2016-03-08 18:55:38
【问题描述】:

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

例如

const fooBar = () => 'foobar!'

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

【问题讨论】:

  • 你可以这样做。您希望收到有关“fooBar”何时更改的通知,因为它不是通过 Redux 更改的

标签: reactjs redux react-redux


【解决方案1】:

是的,这是一个可以接受的用例 - 但是,我们也许可以更简洁地实现此功能。例如,react-redux 中的 mapStateToProps 接受名为 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!')}

我的容器

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

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 2019-08-27
    • 2020-06-10
    • 2011-12-02
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多