Тройной оператор в jsx включить html с реакцией
Я использую реакцию, и я пытаюсь отобразить это сообщение об ошибке, если 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>
В настоящее время его просто отображается return (this.state.message === 'failed') ? ( =>
в html
Ответы
Ответ 1
Мне в настоящее время нравится форматировать мои троицы следующим образом:
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
допустимо, но оператор return render
может содержать только выражения, поэтому вам придется делать это в другом месте.
Ответ 2
Синтаксис тройного значения 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>
);
}
Ответ 3
Вы должны попробовать следующее:
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>
);
}
Ответ 4
Для использования переменных внутри тернарных скобок снова
render() {
return(
<div className='searchbox'>
{this.state.var ? <div className='warning'>{this.state.var}</div> : ''}
</div>
)
}
Ответ 5
Принятый ответ @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>
)
}
)