我的 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)
,对象似乎等于前一个状态对象(因此对象可以是未定义的)。
我确信必须有一种更简单的方法来获取条件,而无需在代码中重复太多。
注意事项
getObjectById
和getCriteriaByIds
是基于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 : [])
};
};
如果您不希望 object
是 undefined
这可以进一步简化为
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/