私は反応で同等のものを書きたい:
if (this.props.conditionA) {
<span>Condition A</span>
} else if (this.props.conditionB) {
<span>Condition B</span>
} else {
<span>Neither</span>
}
かもね
render() {
return (<div>
{(function(){
if (this.props.conditionA) {
return <span>Condition A</span>
} else if (this.props.conditionB) {
return <span>Condition B</span>
} else {
return <span>Neither</span>
}
}).call(this)}
</div>)
}
しかし、それは過度に複雑に思えます。もっと良い方法はありますか?
なぜあなたは、三項が十分に表現力がないと言いますか?
render() {
return <span>
{this.props.conditionA ? "Condition A"
: this.props.conditionB ? "Condition B"
: "Neither"}
</span>;
}
<div>
が必要ない場合は、<span>
要素を返すだけです:
render() {
if (this.props.conditionA) {
return <span>Condition A</span>;
} else if (this.props.conditionB) {
return <span>Condition B</span>;
} else {
return <span>Neither</span>;
}
}
最後のreturn
ステートメントをelse
ブロックから移動することもできます。
一般的に、JSX内にすべてを埋め込む必要はありません。他の場所で行うように、値を事前に計算することはまったく問題ありません。
render() {
let content;
if (this.props.conditionA) {
content = <span>Condition A</span>;
} else if (this.props.conditionB) {
content = <span>Condition B</span>;
} else {
content = <span>Neither</span>;
}
return <div>{content}</div>;
}
文を必要とする/使いたいときはいつでもそれをしなければなりません。
値を計算し、変数にバインドしてから、後で出力する方が適切です。複雑なロジックをインラインで(doしたい場合は、&&
および||
:
render() {
return (<div>
{
this.props.conditionA && <span>Condition A</span>
|| this.props.conditionB && <span>Condition B</span>
|| <span>Neither</span>
}
</div>)
}
編集:
他の人が指摘したように、そのラッピングdivを削除してもこのアプローチを使用できます。
render() {
return (
this.props.conditionA && <span>Condition A</span>
|| this.props.conditionB && <span>Condition B</span>
|| <span>Neither</span>
);
}
あなたの状態があなたが表現したものと同じくらい簡単なら、私はあなたが上記の@SkinnyJのように三項をまだ使用できると思います。それは非常にエレガントですが、チェックするこれらの条件がたくさんある場合、私はあなたの懸念を得る。この問題を解決する別の方法が1つあります。switchステートメントを使用することです。
const props = {
conditionA: "this is condition a"
};
let value;
switch (Object.keys(props)[0]) {
case "conditionA":
value = "Condition A";
break;
case "conditionB":
value = "Condition B";
break;
default:
value = "Neither";
}
console.log(value);
ここではいくつかの仮定があります。オブジェクトがnullではなく、プロパティが1つしかないこと。
ただし、このようなシナリオの場合、これらが当てはまる場合、スイッチの方がパフォーマンスが向上する可能性があります。これはあなたにとって興味深いかもしれません:
まだこの問題が発生している場合は、eslintrc.js
ファイル。
"no-nested-ternary" : "off"
これにより、jsxコードでネストされた3項の使用を開始できます。
確かに、それは方法ではありません。
var element;
if (this.props.conditionA) {
element = (<span>Condition A</span>)
} else if (this.props.conditionB) {
element = (<span>Condition B</span>)
} else {
element = (<span>Neither</span>)
}
...
{element}