javascript - 在反应javascript中混合material-ui元素和代码的问题
问题描述
我在尝试在 react jsx 代码中使用代码和 material-ui 元素时经常遇到问题。这是一个代码片段:
const icols = 0;
const makeTableRow = (
x,
i,
formColumns,
handleRemove,
handleSelect) =>
<TableRow key={`tr-${i}`}>
{formColumns.map((y, k) => (
y.displayColumn ? (<TableCell key={`trc-${k}`}>{x[y.name]}</TableCell>) : null), <-comma added for next line
y.displayColumn ? (cols+=1) : null)
)}
<TableCell>
<IconButton onClick={() => handleSelect(i)} ><EditIcon fontSize='small'/></IconButton>
<IconButton onClick={() => handleRemove(i)} ><DeleteForeverIcon fontSize='small' /></IconButton>
</TableCell>
</TableRow>
当我在上面添加这一行时,出现 jsx 解析错误:
y.displayColumn ? (cols+=1) : null)
如果我删除上面 EOL 处的逗号,我仍然会收到错误消息。基本上我不能得到一张地图来执行多个语句。
如果我取出该行和它上面的 EOL 逗号,一切正常,但我没有得到我需要的显示列数。
我尝试过使用我更熟悉的简单 if/else,但我从来没有能够让 if/else 在 jsx 函数中工作。我只想为将 displayColumn 标志设置为 true 的列创建一个表格单元,并且我想要显示的列的总数,以便以后可以使用它(cols)。
有没有办法用 if/else 语句来完成这个?然后我可以在 if 子句中有超过 1 个语句。三元运算符只允许 1 条语句,我在任何地方都找不到地图的限制。
在此先感谢您的帮助!
解决方案
你可以做这样的事情。您可以在 map 中打开打开箭头函数体并放入 return JSX 并在cols
那里进行增量。我们可以只使用一个条件语句,而不是让两个三元运算符检查相同的条件。
<TableRow key={`tr-${i}`}>
{
formColumns.map((y, k) => {
if (y.displayColumn) {
cols += 1;
return <TableCell key={`trc-${k}`}>{x[y.name]}</TableCell>
}
return null
})
}
<TableCell>
<IconButton onClick={() => handleSelect(i)} ><EditIcon fontSize='small'/></IconButton>
<IconButton onClick={() => handleRemove(i)} ><DeleteForeverIcon fontSize='small' /></IconButton>
</TableCell>
</TableRow>
推荐阅读
- css - 使用变换样式时 Chrome 中的文本损坏:preserve-3d;在不透明的旋转内容上
- java - Spring JPA - 实体的 RESTful 部分更新和验证
- excel - 如何实现动态数据验证,例如 Excel VBA 函数?
- java - app setBackground() 错误:不兼容的类型:int 无法转换为 Drawable
- reactjs - 对窗口/选项卡关闭不显示对话框做出反应
- php - Laravel - 根据数据透视表中的字段显示具有多对多关系的字段
- jquery - 如何循环一个
- 在使用电子表格数据作为菜单的谷歌脚本中
- swift - Swift 上的通用协议
- here-api - 此处地图避免重新路由
- sharepoint - 如何阻止 JAWS 读取“已删除”的内容