JSX 中的 If 语句与 React
If statements inside JSX with React
我正在尝试从数组在 React 中创建列表。我用
完成了
const persons = [
{ name: 'A', website: 'http://google.com' },
{ name: 'B', email: 'b@google.com' },
];
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
<ul className="list-group list-group-flush">
<a href="{person.website}" className="list-group-item">{person.website}</a>
<a href="mailto:{person.email}" className="list-group-item">{person.email}</a>
</ul>
</div>
);
const PersonList = () => (
<div className="card-deck-wrapper">
{listItems}
</div>
);
问题是数据不同,所以有些人没有电子邮件,有些人没有网站,有些人两者都没有。
所以如果一个人两者都没有,这个街区
<ul className="list-group list-group-flush">
<a href="{person.website}" className="list-group-item">{person.website}</a>
<a href="mailto:{person.email}" className="list-group-item">{person.email}</a>
</ul>
应该完全省略。
如果此人没有电子邮件,则应省略电子邮件 link,如果 he/she 没有网站,则应省略此 link .
所以我的 JSX 中需要一些 if 语句。
我想要的是这样的
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
if (person.website || person.email) {
<ul className="list-group list-group-flush">
if (person.website) {
<a href="{person.website}" className="list-group-item">{person.website}</a>
}
if (person.email) {
<a href="mailto:{person.email}" className="list-group-item">{person.email}</a>
}
</ul>
}
</div>
);
但它不是有效的 JSX。
您可以使用大括号 + &&
来实现。
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
{(person.website || person.email) &&
<ul className="list-group list-group-flush">
{person.website && <a href={person.website} className="list-group-item">{person.website}</a>}
{person.email && <a href={"mailto:" + person.email} className="list-group-item">{person.email}</a>}
</ul>
}
</div>
);
const persons = [
{ name: 'A', website: 'http://google.com' },
{ name: 'B', email: 'b@google.com' },
{ name: "No Email No Website"}
];
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
{(person.website || person.email) &&
<ul className="list-group list-group-flush">
{person.website && <a href={person.website} className="list-group-item">{person.website}</a>}
{person.email && <a href={"mailto:" + person.email} className="list-group-item">{person.email}</a>}
</ul>
}
</div>
);
const PersonList = () => (
<div className="card-deck-wrapper">
{listItems}
</div>
);
ReactDOM.render(
<PersonList />,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container"></div>
您可以使用三元运算符和条件运算符(&&、||、===、!=)来实现同样的效果
{
(person.website || person.email) ? some View when condition is true
:
some View when condition is false
}
您不能使用 if 语句是 JSX 块,请改用三元运算符:
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
{person.website || person.email ? (
<ul className="list-group list-group-flush">
{person.website ? <a href={person.website} className="list-group-item">{person.website}</a> : null}
{person.email ? <a href={person.email} className="list-group-item">{person.email}</a> : null}
</ul>
) : null}
</div>
);
我正在尝试从数组在 React 中创建列表。我用
完成了const persons = [
{ name: 'A', website: 'http://google.com' },
{ name: 'B', email: 'b@google.com' },
];
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
<ul className="list-group list-group-flush">
<a href="{person.website}" className="list-group-item">{person.website}</a>
<a href="mailto:{person.email}" className="list-group-item">{person.email}</a>
</ul>
</div>
);
const PersonList = () => (
<div className="card-deck-wrapper">
{listItems}
</div>
);
问题是数据不同,所以有些人没有电子邮件,有些人没有网站,有些人两者都没有。
所以如果一个人两者都没有,这个街区
<ul className="list-group list-group-flush">
<a href="{person.website}" className="list-group-item">{person.website}</a>
<a href="mailto:{person.email}" className="list-group-item">{person.email}</a>
</ul>
应该完全省略。
如果此人没有电子邮件,则应省略电子邮件 link,如果 he/she 没有网站,则应省略此 link .
所以我的 JSX 中需要一些 if 语句。
我想要的是这样的
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
if (person.website || person.email) {
<ul className="list-group list-group-flush">
if (person.website) {
<a href="{person.website}" className="list-group-item">{person.website}</a>
}
if (person.email) {
<a href="mailto:{person.email}" className="list-group-item">{person.email}</a>
}
</ul>
}
</div>
);
但它不是有效的 JSX。
您可以使用大括号 + &&
来实现。
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
{(person.website || person.email) &&
<ul className="list-group list-group-flush">
{person.website && <a href={person.website} className="list-group-item">{person.website}</a>}
{person.email && <a href={"mailto:" + person.email} className="list-group-item">{person.email}</a>}
</ul>
}
</div>
);
const persons = [
{ name: 'A', website: 'http://google.com' },
{ name: 'B', email: 'b@google.com' },
{ name: "No Email No Website"}
];
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
{(person.website || person.email) &&
<ul className="list-group list-group-flush">
{person.website && <a href={person.website} className="list-group-item">{person.website}</a>}
{person.email && <a href={"mailto:" + person.email} className="list-group-item">{person.email}</a>}
</ul>
}
</div>
);
const PersonList = () => (
<div className="card-deck-wrapper">
{listItems}
</div>
);
ReactDOM.render(
<PersonList />,
document.getElementById('container')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="container"></div>
您可以使用三元运算符和条件运算符(&&、||、===、!=)来实现同样的效果
{
(person.website || person.email) ? some View when condition is true
:
some View when condition is false
}
您不能使用 if 语句是 JSX 块,请改用三元运算符:
const listItems = persons.map((person, i) =>
<div className="card" key={i}>
<div className="card-block">
<h4 className="card-title">{person.name}</h4>
</div>
{person.website || person.email ? (
<ul className="list-group list-group-flush">
{person.website ? <a href={person.website} className="list-group-item">{person.website}</a> : null}
{person.email ? <a href={person.email} className="list-group-item">{person.email}</a> : null}
</ul>
) : null}
</div>
);