Reactjs 我可以在MapStateTops中操作值吗

Reactjs 我可以在MapStateTops中操作值吗,reactjs,react-redux,Reactjs,React Redux,我正在学习React和Redux,发现以下问题我无法解决,我有一个配置对象在存储中,可能看起来像这样: { general:{duration:100,strength:100}, gameA:{strength:50}, gameB:{duration:50} } 其中,通用对象将始终存在并具有所有属性,并且它可以具有一个或多个具有全部或部分覆盖属性的游戏对象 现在,游戏GameA和GameB正在使用duration和strength道具,所以我可以: const m

我正在学习React和Redux,发现以下问题我无法解决,我有一个配置对象在存储中,可能看起来像这样:

{
    general:{duration:100,strength:100},
    gameA:{strength:50},
    gameB:{duration:50}
}
其中,通用对象将始终存在并具有所有属性,并且它可以具有一个或多个具有全部或部分覆盖属性的游戏对象

现在,游戏
GameA
GameB
正在使用
duration
strength
道具,所以我可以:

const mapStateToProps = (state) => {
    return {
        duration: state.general.duration,
        strength: state.general.strength
}
export default connect(mapStateToProps)(GameA);
但正如我的商店示例所示,我可以为每种游戏类型设置不同的设置,然后覆盖常规设置。然后我可以在MapStateTops函数中执行此操作吗

const mapStateToProps = (state) => {
    let {duration, strength} = state.general;
    if(state.gameA && state.gameA.duration) duration = state.gameA.duration;
    if(state.gameA && state.gameA.strength) strength= state.gameA.strength;
    return {
        duration: duration,
        strength: strength
}

另一种模式是使用
重新选择
从状态计算派生值:

选择器提供了记录派生值的好处,鉴于react生命周期方法的敏感性,这证明非常有用(如果不需要,为什么要多次进行此计算?)

我发现它们对于从组件中抽象表示逻辑非常有用

下面是一个简短且非常简单的示例:

const-mapStateToProps=state=>({
价格:getPriceWithDollarSign(状态),
})
//选择器/price.js
const getProduct=(state)=>state.product//返回{price:7.00}
//我发现用“get”立即识别选择器很有用,所以我知道它是一个选择器
导出常量getPriceWithDollarSign=createSelector(getProduct,(item)=>{
//对于此特定项,这将只计算一次,以后将调用此方法
//将返回通过重新选择缓存的值(直到方法输入发生更改)
return`$${item.price}`//item是getProduct返回的值
})
在组件中,您将得到
this.props.price->'$7.00'

reselect
的美妙之处在于它能够组合多个选择器,从而可以轻松地在彼此之间共享和使用其他选择器

查看更多信息


虽然使用“重新选择”是为了从redux状态派生值,但您可以将该库与任何数据结构/库/框架一起使用。

我认为您的代码可以工作。一般来说,我倾向于避免将业务逻辑放在
mapstatetops
函数中。您可以在组件本身中轻松地做到这一点:(构造函数、呈现函数或组件将接收props,具体取决于您的情况)我想知道为什么有一个状态为常量的对象。状态意味着公开将更改的数据。在我的示例中,什么是常量?所有值都可以更改。。。