この方法にはどのようにしたらよいですか。ヌル合体オペレータJavascript
this.state.updateItem?this.state.updateItem.unit:'Unit';
私はthis.state.updateItem.unitで試しました。 'Unit'。しかし、this.state.updateItemがNULLなので、unitのプロパティを見つけることができないので、エラーが発生することがわかりました。
どのようにより良い方法でそれを行うには?
この方法にはどのようにしたらよいですか。ヌル合体オペレータJavascript
this.state.updateItem?this.state.updateItem.unit:'Unit';
私はthis.state.updateItem.unitで試しました。 'Unit'。しかし、this.state.updateItemがNULLなので、unitのプロパティを見つけることができないので、エラーが発生することがわかりました。
どのようにより良い方法でそれを行うには?
あなたはこのような操作を行う必要があります:私たちは(最終的には、うまくいけば)このような何かを行うことができますせるoptional chainingためのES(JavaScriptの)に、ステージ1つの提案は
(this.state.updateItem || {}).unit || 'Unit'
があります:あなたはバベルをやっている場合
this.state.updateItem?.unit || 'Unit'
そして、あなたは今、それを使用することができます!:
https://www.npmjs.com/package/babel-plugin-transform-optional-chaining
あなたはデフォルト値として空のオブジェクトを設定して試すことができます:
(this.state.updateItem || {}).unit || 'Unit'
ユニットは、常にどちらかの値を持っているか、未定義になります。今の
ありがとう!これは仕事です! –
ここES6の非構造およびデフォルトを使用しての方法です:
const {
updateItem: {
unit = 'Unit'
} = {}
} = this.state;
その後、あなたはちょうどあなたがこのような何かを行うことができunit
あなたの提案をありがとうが、私はインラインの答えを探しています –
を使用することができます。
const path = (pathString, obj) =>
pathString.split(".")
.reduce((obj = {}, key) => obj[key], obj);
const defaultTo = (x, y) => y == null ? x : y;
// in your own code
const unit = defaultTo(
"Unit",
path("state.updateItem.unit", this)
);
これらの関数は、ramdaやlodash/fpのようなライブラリ内にすでに存在しています。
また、完全には完全ではありませんが、どこでもobj?.state?.updateItem?.unit
の必要性が軽減されます。
考えていただきありがとうございます! そうですね、そういうことをするのは素晴らしいことだと思います。 –