【问题标题】:sonar code smell for reducer used in combineReducercombineReducer 中使用的减速器的声纳代码气味
【发布时间】:2019-05-06 19:27:29
【问题描述】:

我正在使用 combineReducer 像这样组合 reducers 和 reducer

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参数怎么处理?

【问题讨论】:

    标签: javascript reactjs redux sonarqube


    【解决方案1】:

    在我们的项目中确实遇到了同样的问题,并且 sonar 允许您为 Administration -> Congifuration -> Analysis Scope 中的规则和文件定义排除项。

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

    喜欢:

    【讨论】:

      【解决方案2】:

      来自 Sonarqube 文档:

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

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

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

      【讨论】:

        【解决方案3】:

        如果为第二个参数定义一个默认值会怎样?

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

        【讨论】:

          【解决方案4】:

          使用{} 设置操作:

          例如,改变下面的代码

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

          到这里

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

          将是最安全的方式。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-07-21
            • 2018-12-06
            • 2021-07-21
            • 2016-06-23
            • 2011-04-03
            • 1970-01-01
            • 2012-12-12
            • 1970-01-01
            相关资源
            最近更新 更多