Immutable.js有条件地更新地图
Immutable.js conditionally update Map
const state = fromJS({
poolName: {
poolNameCost:
poolNamePercentage:
poolNameShare:
}
})
其中 poolName
因操作而异。
我必须更新所有属性 poolNameCost, poolNamePercentage, poolNameShare
如果其中任何一个更新。
我愿意
const { poolName, val, fieldSuffix, initialCost, initialShare } = action.payload;
state.update(`${poolName}`,
items => ({
...items,
[`${poolName}Cost`]() {
if (suffix === 'Share') return (val / initialCost) * initialShare;
if (suffix === 'Percentage') return (val / initialCost) * 100;
return val
},
[`${poolName}Share`]() { //.....// },
[`${poolName}Percentage`]() { //.....// },
})
)
我得到一个空对象 poolName = {}
。为什么会这样?
上面的代码是下面代码的重构版本,效果很好。
代码,
(suffix === 'Cost') &&
state.update(`${poolName}`,
items => ({
...items,
[`${poolName}Share`]: (val / initialCost) * initialShare,
//...similarly for other sibling property of `Share` in `poolName`...//
})
)
值正确更新。
线条
[`${poolName}Cost`]() {
if (suffix === 'Share') return (val / initialCost) * initialShare;
if (suffix === 'Percentage') return (val / initialCost) * 100;
return val
},
在代码中调用时返回函数本身。所以我把它们改成了 IIFE,像这样
[`${poolName}Cost`]: (function() {
if (suffix === 'Share') return (val / initialCost) * initialShare;
if (suffix === 'Percentage') return (val / initialCost) * 100;
return val
})(),
现在returns评估后的基础价值。
有没有更好的方法来达到这个效果?
const state = fromJS({
poolName: {
poolNameCost:
poolNamePercentage:
poolNameShare:
}
})
其中 poolName
因操作而异。
我必须更新所有属性 poolNameCost, poolNamePercentage, poolNameShare
如果其中任何一个更新。
我愿意
const { poolName, val, fieldSuffix, initialCost, initialShare } = action.payload;
state.update(`${poolName}`,
items => ({
...items,
[`${poolName}Cost`]() {
if (suffix === 'Share') return (val / initialCost) * initialShare;
if (suffix === 'Percentage') return (val / initialCost) * 100;
return val
},
[`${poolName}Share`]() { //.....// },
[`${poolName}Percentage`]() { //.....// },
})
)
我得到一个空对象 poolName = {}
。为什么会这样?
上面的代码是下面代码的重构版本,效果很好。
代码,
(suffix === 'Cost') &&
state.update(`${poolName}`,
items => ({
...items,
[`${poolName}Share`]: (val / initialCost) * initialShare,
//...similarly for other sibling property of `Share` in `poolName`...//
})
)
值正确更新。
线条
[`${poolName}Cost`]() {
if (suffix === 'Share') return (val / initialCost) * initialShare;
if (suffix === 'Percentage') return (val / initialCost) * 100;
return val
},
在代码中调用时返回函数本身。所以我把它们改成了 IIFE,像这样
[`${poolName}Cost`]: (function() {
if (suffix === 'Share') return (val / initialCost) * initialShare;
if (suffix === 'Percentage') return (val / initialCost) * 100;
return val
})(),
现在returns评估后的基础价值。
有没有更好的方法来达到这个效果?