如何在 JSX 中使用 switch cases:ReactJS
How to use switch cases inside JSX: ReactJS
我在我的 React 应用程序中导入了四个组件。我如何有条件地渲染其中一个组件(基于道具)。这就是我想要做的
<ReactSVGPanZoom
//switch(this.props.Selected){
// case '1': render <ComponentOne/>; break;
// case '2': render <ComponentTwo/>; break;
// case '3': render <ComponentThree/>; break;
// case '4': render <ComponentFour/>; break;
// default: render <ComponentOne/>
}
</ReactSVGPanZoom>
直接不允许,因为我们不能在JSX里面放任何语句。您可以做一件事,将代码(切换逻辑)放入一个函数中并调用该函数,然后 return 从中得到正确的组件。
检查文档:Embedding Expressions in JSX
像这样:
<ReactSVGPanZoom
{this.renderComponent()}
</ReactSVGPanZoom>
renderComponent(){
switch(this.props.Selected){
case '1': return <ComponentOne/>;
case '2': return <ComponentTwo/>;
case '3': return <ComponentThree/>;
case '4': return <ComponentFour/>;
default: return <ComponentOne/>
}
}
建议:
在 return
. 之后不需要 break
您可以从开关中获取组件(在函数中或在 render
中内联)并将其呈现为 ReactSvgPanZoom
的子项,如下所示:
getComponent(){
switch(this.props.Selected){
case '1':
return <ComponentOne/>;
case '2':
return <ComponentTwo/>;
// .. etc
default:
return <ComponentOne/>
}
}
render() {
return (<ReactSVGPanZoom>
{this.getComponent()}
</ReactSVGPanZoom>);
}
您可以创建一个常量并在需要时使用它:
import React from "react";
export const myComponents = {
Component1: <Component1 />,
Component2: <Component2 />,
Component3: <Component3 />,
Component4: <Component4 />,
}
现在在你的主要组件中:
import React from "react";
import {myComponents} from "./const";
...
render() {
return (
<div>
{myComponents[this.props.Selected]}
</div>
)
}
有一个用于此目的的结构:Do Expression
你可以这样使用它:
<ReactSVGPanZoom
{do {
switch (this.props.Selected) {
case '1': <ComponentOne/>; break;
case '2': <ComponentTwo/>; break;
case '3': <ComponentThree/>; break;
case '4': <ComponentFour/>; break;
default: <ComponentOne/>;
}
}}
</ReactSVGPanZoom>
请记住,不要在 do 表达式中使用 return
,并且 do 表达式中的最后一个表达式将是返回值。所以即使你在 switch 后面放一个分号也会毁掉东西。
render() {
return (
<div>
{
(() => {
switch(this.props.value) {
case 1:
return this.myComponentMethod();
break;
case 2:
return () => { return <AnotherComponent/> };
break;
case 3:
return <div>1</div>;
break;
default: return null; break;
}
}).call(this)
}
</div>
)
}
export default function FunctionName(props) {
return (
<div>
{
(() => {
switch (props.value) {
case 1:
return <p>Case 1<;
break;
case 2:
return () => { return <AnotherComponent /> };
break;
case 3:
return <div>1</div>;
break;
default: return null; break;
}
})
}
</div>
)
}
我在我的 React 应用程序中导入了四个组件。我如何有条件地渲染其中一个组件(基于道具)。这就是我想要做的
<ReactSVGPanZoom
//switch(this.props.Selected){
// case '1': render <ComponentOne/>; break;
// case '2': render <ComponentTwo/>; break;
// case '3': render <ComponentThree/>; break;
// case '4': render <ComponentFour/>; break;
// default: render <ComponentOne/>
}
</ReactSVGPanZoom>
直接不允许,因为我们不能在JSX里面放任何语句。您可以做一件事,将代码(切换逻辑)放入一个函数中并调用该函数,然后 return 从中得到正确的组件。
检查文档:Embedding Expressions in JSX
像这样:
<ReactSVGPanZoom
{this.renderComponent()}
</ReactSVGPanZoom>
renderComponent(){
switch(this.props.Selected){
case '1': return <ComponentOne/>;
case '2': return <ComponentTwo/>;
case '3': return <ComponentThree/>;
case '4': return <ComponentFour/>;
default: return <ComponentOne/>
}
}
建议:
在return
. 之后不需要 break
您可以从开关中获取组件(在函数中或在 render
中内联)并将其呈现为 ReactSvgPanZoom
的子项,如下所示:
getComponent(){
switch(this.props.Selected){
case '1':
return <ComponentOne/>;
case '2':
return <ComponentTwo/>;
// .. etc
default:
return <ComponentOne/>
}
}
render() {
return (<ReactSVGPanZoom>
{this.getComponent()}
</ReactSVGPanZoom>);
}
您可以创建一个常量并在需要时使用它:
import React from "react";
export const myComponents = {
Component1: <Component1 />,
Component2: <Component2 />,
Component3: <Component3 />,
Component4: <Component4 />,
}
现在在你的主要组件中:
import React from "react";
import {myComponents} from "./const";
...
render() {
return (
<div>
{myComponents[this.props.Selected]}
</div>
)
}
有一个用于此目的的结构:Do Expression
你可以这样使用它:
<ReactSVGPanZoom
{do {
switch (this.props.Selected) {
case '1': <ComponentOne/>; break;
case '2': <ComponentTwo/>; break;
case '3': <ComponentThree/>; break;
case '4': <ComponentFour/>; break;
default: <ComponentOne/>;
}
}}
</ReactSVGPanZoom>
请记住,不要在 do 表达式中使用 return
,并且 do 表达式中的最后一个表达式将是返回值。所以即使你在 switch 后面放一个分号也会毁掉东西。
render() {
return (
<div>
{
(() => {
switch(this.props.value) {
case 1:
return this.myComponentMethod();
break;
case 2:
return () => { return <AnotherComponent/> };
break;
case 3:
return <div>1</div>;
break;
default: return null; break;
}
}).call(this)
}
</div>
)
}
export default function FunctionName(props) {
return (
<div>
{
(() => {
switch (props.value) {
case 1:
return <p>Case 1<;
break;
case 2:
return () => { return <AnotherComponent /> };
break;
case 3:
return <div>1</div>;
break;
default: return null; break;
}
})
}
</div>
)
}