SonarQube 代码有异味,因为它在三个选项中的两个选项中忽略了“this”

SonarQube code smell due to it ignoring `this` in two of three options

这是我面临的问题的示例。

我怀疑我在这段代码中得到 this error 的原因是因为根据 javascript:3AS3800...

Functions returning this are ignored.

假设是这种情况,我无法想出一个干净的解决方法。

    if (typeof (row) === 'string') {
      return (
        <Grid key={i}>
          <Divider className={classes.divider} />
            <Typography>
              { row }
            </Typography>
        </Grid>
      )
    }

    if (row.constructor === Array) {
      return row.map((item, index) => (
        <Grid key={index}>
          { this.getItem(item, formProps) }
        </Grid>
      ))
    }

    return (
      <Grid key={i}>
        { this.getItem(row, formProps) }
      </Grid>
    )
  }

对于那些可能偶然发现这一点的人,我误解了错误消息。

Sonarqube 希望每个 return 都是相同 type 的值。在我的示例中,中间块 return 是 Grid 组件的列表,而其余 return 单独的 Grid 组件。解决方案是 return 单独的 Grid 组件,如下所示:

    if (typeof (row) === 'string') {
      return ([
        <Grid key={i}>
          <Divider className={classes.divider} />
            <Typography>
              { row }
            </Typography>
        </Grid>,
      ])
    }

    if (row.constructor === Array) {
      return row.map((item, index) => (
        <Grid key={index}>
          { this.getItem(item, formProps) }
        </Grid>
      ))
    }

    return ([
      <Grid key={i}>
        { this.getItem(row, formProps) }
      </Grid>,
    ])
  }