combineReducer 中使用的减速器的声纳代码气味

IT技术 javascript reactjs redux sonarqube
2021-05-26 15:00:12

我正在使用 combineReducer 像这样组合减速器和减速器

const todo = (state = {}, action) => {
  switch (action.type) {
    //...

    case 'TOGGLE_TODO':
      if (state.id !== action.id) {
        return state
      }

      return Object.assign({}, state, {
        completed: !state.completed
      })

    default:
      return state
  }
}

我的问题是,如果我像这样定义减速器,我会闻到声纳代码的味道

Function parameters with default values should be last1

但是在这个序列中结合reducer pass参数只是如何解决这个问题?

4个回答

我们在我们的项目中确实遇到了同样的问题,声纳允许您在Administration -> Congifuration -> Analysis Scope.

您会在那里找到一个名为的部分Ignore issues on Multiple Criteria,您可以在那里输入规则和“文件模式”以从该规则中排除文件。

喜欢: 在此处输入图片说明

来自 Sonarqube 文档:

具有默认值的函数参数应该放在最后:

...但是所有有默认值的函数参数都应该在没有默认值的函数参数之后声明。否则,调用者就无法利用默认值;他们必须重新指定默认值或传递 undefined 以“获取”非默认参数。

然而,这确实适用于 Redux,因为它第一次以undefined第一个参数调用您的减速器如果您想继续使用此模式,则需要禁用该规则或从分析中跳过该行。

如果为第二个 arg 定义默认值会怎样?

const todo = (state = {}, action = null/undefined) => {

设置动作{}

例如,更改以下代码

const todo = (state = {}, action) => { }

对此

const todo = (state = {}, action = {}) => { }

将是最安全的方式。