javascript - JSX 中的多个 if/else
问题描述
我正在尝试在 jsx 中增加一个变量map()
并基于它隐藏元素。我收到以下错误
编译失败。
解析错误:相邻的 JSX 元素必须包含在封闭标记中。你想要一个 JSX 片段 <>...?
我认为这是困扰我的那一行
{myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className="">}
有任何想法吗?(我不是一个全职的 React 开发人员,所以在 jsx 中有点迷失)
这是该部分的完整代码
{props.config.map(row => (
(row.isRequired || props.data[row.key]) &&
<React.Fragment>
{row.isFullWidth ?
<div data-key-id={row.key} key={row.key} className="">
<div className="">
<div className="">some key</div>
<div className="">some value</div>
</div>
</div>
:
<React.Fragment>
{myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className="">}
<div className="">
<div className="">{row.key}:</div>
<div className="">{row.value}</div>
</div>
{myIncrement % 2 == 0 && </div>}
{myIncrement = !row.isFullWidth ? myIncrement + 1 : myIncrement}
</React.Fragment>
}
</React.Fragment>
))}
解决方案
第一个问题:地图周围缺少碎片
基本上你不能有一个看起来像
<foo/>
<bar/>
因为 React 不知道根元素,它需要做 React 魔术,将 JSX 转换为响应式 HTML,而不是你需要有
<>
<foo/>
<bar/>
</>
<>
是的简写<React.Fragment>
这就是有关相邻元素的错误消息的含义。您的地图将创建相邻元素:
['a', 'b', 'c'].map(letter => <div>{letter}</div>)
will produce
<div>a</div>
<div>b</div>
<div>c</div>
要修复此错误,只需在地图周围添加一个片段:
<>
{ props.config.map(row => (
/* ... */
)}
</>
第二个问题:无效的 JSX 语法
这是无效的 JSX:
{ myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className=""> }
<div className="">
<div className="">{row.key}:</div>
<div className="">{row.value}</div>
</div>
{myIncrement % 2 == 0 && </div>}
我知道在编写它时它是有道理的,但它不会编译,因为 React 会尝试单独评估myIncrement % 2 == 0 && <div data-key-id={row.key} key={row.key} className="">
和myIncrement % 2 == 0 && </div>
它是不可能的(还没有?)。
您可以获得类似如下的内容:
// define this part of the component somewhere
const Foo = ({ key, value}) => (
<div>
<div>{key}:</div>
<div>{value}</div>
</div>
);
// surround it or not by a div, depending on the increment value
{ myIncrement % 2 == 0 ? (
<div data-key-id={row.key} key={row.key}>
<Foo key={row.key} value={row.value}/>
</div>
) : (
<Foo key={row.key} value={row.value}/>
)
}
推荐阅读
- reactjs - 试图通过一个道具
或者 - python-2.7 - Python 中的条件“或”运算符未正确验证
- win32-process - CreateProcess Api 创建两个应用程序实例
- android - Android Release APK 在启动时立即崩溃 - React Native(版本 0.58.4)
- c++11 - 哪些 C++ 标准库函数分配内存?
- kotlin - Kotlin 中 eval 关键字的使用
- c# - Excel 没有关闭
- apache-spark - CSV 文件是否分区和并行化乘法?
- ios - 如何创建具有动态标签数量的自定义 UITableViewCell
- reactjs - 我在哪里可以使用 React/Redux 设置我的代码逻辑