jsx 中的三元运算符包含 html 与反应
ternary operator in jsx to include html with react
我正在使用 React,如果 this.state.message === 'failed'
,我正在尝试显示此错误消息。但我真的不确定为什么这个三元运算不起作用。我在这里做错了什么?
render() {
...
<div className="row">
return (this.state.message === 'failed') ? ( =>{" "}
{
<div className="alert alert-danger" role="alert">
Something went wrong
</div>
}
)() : false; }
</div>
}
现在 html
中只显示 return (this.state.message === 'failed') ? ( =>
你应该试试这个:
render () {
return (
<div className="row">
{ (this.state.message === 'failed') ?
<div className="alert alert-danger" role="alert">
Something went wrong
</div> :
<span> Everything in the world is fine </span> }
</div>
);
}
三进制的语法是 condition ? if : else
。为了安全起见,您始终可以将整个三元语句括在括号内。 JSX 元素也包含在括号中。箭头函数中的粗箭头前面总是有两个括号(用于参数)——但无论如何你在这里不需要任何函数。因此,鉴于所有这些,您的代码中存在一些语法错误。这是一个可行的解决方案:
render() {
return (this.state.message === 'failed' ? (
<div className="alert alert-danger" role="alert">
Something went wrong
</div>
) : null);
}
编辑:如果这是在其他标记内,则无需再次调用渲染。您可以只使用花括号进行插值。
render() {
return (
<div className="row">
{this.state.message === 'failed' ? (
<div className="alert alert-danger" role="alert">
Something went wrong
</div>
) : null}
</div>
);
}
我目前喜欢在 React 中像这样格式化我的三元组:
render () {
return (
<div className="row">
{ //Check if message failed
(this.state.message === 'failed')
? <div> Something went wrong </div>
: <div> Everything in the world is fine </div>
}
</div>
);
}
您说得对,IIFE 可以在渲染语句和三元表达式中使用。使用普通的 if .. else
语句是有效的,但是 render
函数的 return 语句只能包含表达式,因此您必须在其他地方执行这些操作..
要在三元内使用变量,再次使用括号
render() {
return(
<div className='searchbox'>
{this.state.var ? <div className='warning'>{this.state.var}</div> : ''}
</div>
)
}
@Nathan 接受的答案和其他类似答案是正确的。但值得注意的是 ?
的结果和 :
的结果都必须是单个元素或包裹在单个元素中(或者结果可能是 null | undefined
,其中任何一个都符合条件作为单个元素)。在下面的示例中,?
的结果将有效,但 :
的结果将失败....
return (
{this.state.message === 'failed' ? (
<div>
<row>three elements wrapped</row>
<row>inside</row>
<row>another element work.</row>
</div>
) : (
<row>html like</row>
<row>haiku</row>
<row>must follow rules of structure.</row>
)
}
)
鉴于上述答案,您还可以直接在 render()
中 return 来自 return()
的三元表达式
return condition? this.function1(): this.function2();
在 function1() 和 function2() 中,您可以 return 您的观点。
请记住,三元表达式应该包裹在一个片段或div中,如果不包裹它会抛出编译错误
return (
<Fragment>
{fetching ? <Loading></Loading> : <p>Fetched</p>}
</Fragment>
);
我正在使用 React,如果 this.state.message === 'failed'
,我正在尝试显示此错误消息。但我真的不确定为什么这个三元运算不起作用。我在这里做错了什么?
render() {
...
<div className="row">
return (this.state.message === 'failed') ? ( =>{" "}
{
<div className="alert alert-danger" role="alert">
Something went wrong
</div>
}
)() : false; }
</div>
}
现在 html
中只显示return (this.state.message === 'failed') ? ( =>
你应该试试这个:
render () {
return (
<div className="row">
{ (this.state.message === 'failed') ?
<div className="alert alert-danger" role="alert">
Something went wrong
</div> :
<span> Everything in the world is fine </span> }
</div>
);
}
三进制的语法是 condition ? if : else
。为了安全起见,您始终可以将整个三元语句括在括号内。 JSX 元素也包含在括号中。箭头函数中的粗箭头前面总是有两个括号(用于参数)——但无论如何你在这里不需要任何函数。因此,鉴于所有这些,您的代码中存在一些语法错误。这是一个可行的解决方案:
render() {
return (this.state.message === 'failed' ? (
<div className="alert alert-danger" role="alert">
Something went wrong
</div>
) : null);
}
编辑:如果这是在其他标记内,则无需再次调用渲染。您可以只使用花括号进行插值。
render() {
return (
<div className="row">
{this.state.message === 'failed' ? (
<div className="alert alert-danger" role="alert">
Something went wrong
</div>
) : null}
</div>
);
}
我目前喜欢在 React 中像这样格式化我的三元组:
render () {
return (
<div className="row">
{ //Check if message failed
(this.state.message === 'failed')
? <div> Something went wrong </div>
: <div> Everything in the world is fine </div>
}
</div>
);
}
您说得对,IIFE 可以在渲染语句和三元表达式中使用。使用普通的 if .. else
语句是有效的,但是 render
函数的 return 语句只能包含表达式,因此您必须在其他地方执行这些操作..
要在三元内使用变量,再次使用括号
render() {
return(
<div className='searchbox'>
{this.state.var ? <div className='warning'>{this.state.var}</div> : ''}
</div>
)
}
@Nathan 接受的答案和其他类似答案是正确的。但值得注意的是 ?
的结果和 :
的结果都必须是单个元素或包裹在单个元素中(或者结果可能是 null | undefined
,其中任何一个都符合条件作为单个元素)。在下面的示例中,?
的结果将有效,但 :
的结果将失败....
return (
{this.state.message === 'failed' ? (
<div>
<row>three elements wrapped</row>
<row>inside</row>
<row>another element work.</row>
</div>
) : (
<row>html like</row>
<row>haiku</row>
<row>must follow rules of structure.</row>
)
}
)
鉴于上述答案,您还可以直接在 render()
中 return 来自 return()
的三元表达式
return condition? this.function1(): this.function2();
在 function1() 和 function2() 中,您可以 return 您的观点。
请记住,三元表达式应该包裹在一个片段或div中,如果不包裹它会抛出编译错误
return (
<Fragment>
{fetching ? <Loading></Loading> : <p>Fetched</p>}
</Fragment>
);