Immutable.js有条件地更新Map

时间:2019-02-16 12:45:05

标签: javascript immutable.js

SELECT W1.column2, W2.column2 
   FROM words W1 
        JOIN words W2 ON W1.column1 = W2.column1

其中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 = {}

值正确更新。

1 个答案:

答案 0 :(得分:1)

线条

[`${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
})(),

现在,它会在评估后返回基础值。

有没有更好的方法来获得结果?