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评估后的基础价值。

有没有更好的方法来达到这个效果?