javascript - Redux mapStateToProps 属性依赖

标签 javascript reactjs redux react-redux

我的 mapStateToProps 函数

const mapStateToProps = (state, props) => ({
   object: {},
   criteria: []
 });

它包含两个属性:

<强>1。 对象属性

它从存储中获取与 URL 的对象 ID 对应的对象。

生成的对象如下所示:

{
  object: {
    id: 42,
    criteria: [1, 2, 3]
  }
}

<强>2。 条件属性

这应该从商店中获取条件对象,以及先前获取的对象的条件 ID 的 ID。

我想出了以下功能:

const mapStateToProps = (state, props) => ({
  object: getObjectById(state, props.routeParams.objectId),
  criteria: getCriteriaByIds(state, getObjectById(state, ownProps.routeParams.objectId) ? getObjectById(state, ownProps.routeParams.objectId).criteria : []),
});

问题

这里有很多重复。如果我直接使用 criteria: getCriteriaByIds(state.props.object.criteria) ,对象似乎等于前一个状态对象(因此对象可以是未定义的)。

我确信必须有一种更简单的方法来获取条件,而无需在代码中重复太多。

注意事项

getObjectByIdgetCriteriaByIds 是基于Colocating selectors with reducers course 的选择器在 Egghead.io 上。

所以我的问题是

What is the recommended way to work with dependencies on other state properties when working with mapStateToProps?

最佳答案

关于“在使用 mapStateToProps 时处理依赖于其他状态属性的推荐方法”,我没有任何有用的补充,但我认为只添加一个局部变量将有助于重复一点。

const mapStateToProps = (state, props) => {
  let object = getObjectById(state, props.routeParams.objectId);
  return {
    object,
    criteria: getCriteriaByIds(state, object ? object.criteria : [])
  };
};

如果您不希望 objectundefined 这可以进一步简化为

const mapStateToProps = (state, props) => {
  let object = getObjectById(state, props.routeParams.objectId);
  return {
    object,
    criteria: getCriteriaByIds(state, object.criteria || [])
  };
};

关于javascript - Redux mapStateToProps 属性依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44065339/

相关文章:

javascript - 在 IE9 中提交表单之前对密码进行哈希处理

JavaScript 正则表达式问题

ReactJS redux 订阅语句

javascript - ReactJs:如何在无状态组件中使用 refs

javascript - 如何验证保存但不验证删除?

javascript - Backbone 尝试使用 put 而不是 post

javascript - ReactJS:React 尝试在容器中重用标记,但校验和无效错误

javascript - 函数声明是非静态的吗?

javascript - 为什么我无法访问函数属性?

reactjs - React/Redux 应用程序在更改时完成重新渲染