有没有更好的方法在 jsx 中使用条件?
Is there a better way to use conditionals inside jsx?
过去几周我一直在学习 React,但我不喜欢的一件事是我必须在渲染函数中对 if else 使用三元运算符。
类似于:
function render() {
return (
{x==="Let's go" ? <Go /> : <Hold on />}
)
}
有没有一种方法可以让我在 React 中使用传统的 if-else 或 switch 来处理 jsx 语法?
我更喜欢这种语法
function render() {
if (x==="Let's go") return <Go />;
return <Hold on />;
}
我使用一些方法来清理更复杂组件的渲染方法。
1) 使用变量。在您实际进入 JSX 部分(return)之前,您可以使用原始 JS 的灵活性来构建变量。举个例子...
function render() {
let body;
if (x === "Let's go") {
body = <Go />
} else {
body = <Hold on />;
}
return (
<div>
{body}
</div>
);
}
注意顶层需要换行,多放一个div就可以了
2) 使用函数。这个例子可能有点过于简单,但你会明白的..
renderBody() {
let body;
if (x === "Let's go") {
body = <Go />
} else {
body = <Hold on />;
}
return (
{body}
)
}
render() {
return (
<div>
{renderBody()}
</div>
)
}
3) 使用数组(实际上是#1 的一个子集)但我经常发现有时我需要 return 1 个元素但其他时候我需要 return 可变数量的场景元素。我将在函数顶部创建一个数组,然后将 push/unshift 元素添加到数组中。请注意,无论何时构建数组,都必须为每个元素提供一个键,以便 React 可以正确更新它。
let els = [
<div key="always">Always here</div>
];
if (foo) {
els.push(<div key="ifFoo">Conditionally Here</div>)
}
然后您只需在主 JSX 中使用 {els} 变量。
4) Return null 当你不想渲染任何东西时
过去几周我一直在学习 React,但我不喜欢的一件事是我必须在渲染函数中对 if else 使用三元运算符。
类似于:
function render() {
return (
{x==="Let's go" ? <Go /> : <Hold on />}
)
}
有没有一种方法可以让我在 React 中使用传统的 if-else 或 switch 来处理 jsx 语法?
我更喜欢这种语法
function render() {
if (x==="Let's go") return <Go />;
return <Hold on />;
}
我使用一些方法来清理更复杂组件的渲染方法。
1) 使用变量。在您实际进入 JSX 部分(return)之前,您可以使用原始 JS 的灵活性来构建变量。举个例子...
function render() {
let body;
if (x === "Let's go") {
body = <Go />
} else {
body = <Hold on />;
}
return (
<div>
{body}
</div>
);
}
注意顶层需要换行,多放一个div就可以了
2) 使用函数。这个例子可能有点过于简单,但你会明白的..
renderBody() {
let body;
if (x === "Let's go") {
body = <Go />
} else {
body = <Hold on />;
}
return (
{body}
)
}
render() {
return (
<div>
{renderBody()}
</div>
)
}
3) 使用数组(实际上是#1 的一个子集)但我经常发现有时我需要 return 1 个元素但其他时候我需要 return 可变数量的场景元素。我将在函数顶部创建一个数组,然后将 push/unshift 元素添加到数组中。请注意,无论何时构建数组,都必须为每个元素提供一个键,以便 React 可以正确更新它。
let els = [
<div key="always">Always here</div>
];
if (foo) {
els.push(<div key="ifFoo">Conditionally Here</div>)
}
然后您只需在主 JSX 中使用 {els} 变量。
4) Return null 当你不想渲染任何东西时