javascript - 如何?使用参数创建 Redux 选择器

标签 javascript reactjs redux react-redux redux-thunk

我有一个状态,其中包含一些数据的 map 数组。 我需要从中选择一个对象。 我可以使用获取整个数组

function mapStateToProps (state) {
  return {
    allDataSet: state.data
  }
}

然后选择需要在组件中放置逻辑的实体。像这样:

(id) => this.props.allDataSet.filter((entity) => entity.id === id)

但不知何故,我认为这样做是错误的,并且违背了所有最佳实践,因为所有选择器逻辑都应该与组件分离。
这个例子很简单,但在我的真实项目中,我必须将复杂的选择器放在我的组件中,只是为了通过 Id 获取数据... 是否有任何模式或最佳实践可以为此提供解决方案?

最佳答案

您应该将 allDataSet 规范化为一个对象,并且键应该是实体的 id。

function mapStateToProps (state) {
  let allDataSet = {};
  state.data.forEach((datum) => {
    allDataSet[datum.id] = datum;
  })
  return {
    allDataSet
  }
}

然后就可以通过this.props.allDataSet[id]来访问需要的实体

看看这个 http://redux.js.org/docs/recipes/reducers/NormalizingStateShape.html

关于javascript - 如何?使用参数创建 Redux 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42556721/

相关文章:

ruby-on-rails - CORS 开发政策阻止的所有请求

javascript - 如何理解立即返回另一个函数的函数

reactjs - 如何处理 Flux 商店中的一对多关系

reactjs - 创建具有远程排序、分页、过滤功能的表

javascript - 在 polymer 元素中动态创建 html 导入(版本 1.0)

javascript - navigator.share 在移动浏览器中不起作用(chrome v64)

reactjs - React JS 虚拟主机

react-native - redux 中的 action、reducer 和 store 有什么区别?

javascript - NodeJS,多个 if 可能返回 header (并且失败)

javascript - jQuery Draggable 小部件无法与 ul 内的 li 一起使用