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>,
])
}
这是我面临的问题的示例。
我怀疑我在这段代码中得到 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>,
])
}