根据当前状态或基于化简器内部定义的值创造价值会使纯函数不纯



我在演练redux-devtools阅读:

您的减速器必须是纯净的,没有副作用才能正常工作 开发工具。例如,即使在化简器中生成随机 ID 也会使 不纯且不确定。相反,请在操作创建者中执行此操作。

这些话说的是关于产生随机值。但是,如何采取基于当前状态的唯一值?例如,通过获取数组的长度作为将数据存储到当前状态时的元素 ID。只要我不是删除数组的任何值,它保证是唯一的。这样做使功能不纯?

或者,通过基于当前状态创建条件值,如下所示:

function reducer (state, action) {
    if (state.isLocked) return state;
    // calculate further
}

或者,更极端地说,通过定义仅存在于函数中的值喜欢:

{ type: 'CREATE_USER', age: 13 }
// it is predictable, always return the same value with same argument
function getAgeText(age) {
  if (age < 5) return 'baby';
  if (age < 20) return 'teenager';
  if (age < 30) return 'mature';
  if (age < 40) return 'old';
  if (age < 50) return 'very old';
  return 'astounding';
} // of course by assuming we have to use this function in case you
  // ask, "Why don't get those values anywhere else and not in
  // this reducer?"
function reducer (state, action) {
  switch (action.type) {
    case 'CREATE_USER':
      return Object.assign({}, state, {
        age: age, ageText: getAgeText(action.age)
      });
    default:
      return state;
  }
}

那么,这些例子是否使功能变得不纯洁?而且,如果不是,这是一种不好的做法吗在 Redux 中创建冗长、复杂的计算或大量嵌套的化简器即使它仅从传递的值(状态和操作)完成?

这两个化简器函数都是确定性的,因为它们总是会基于相同的当前状态返回相同的新状态。

相关内容

  • 没有找到相关文章

最新更新