2016-11-07 1 views
1

たとえば、子コンポーネントにはposition={{x: 50}}が渡されます。子コンポーネント内にthis.props.positionを再割り当てする方法{{x: 50, y: 0}}React:オブジェクト小道具のデフォルトプロパティをどのように割り当てるのですか?

+0

Reactに対してこの問題を見てください:https://github.com/facebook/react/issues/2568そしてこの他の質問:http:// stackoverflow.com/questions/29194997/react-nested-defaultprops-deep-merge –

答えて

1

Reactを使用しているようです。あなたはまた、ES2016を使用している場合は、Object.assignを使用することができます:

var initial = {x: 0, y: 0}; 
var passed = {x: 50}; 

var result = Object.assign({}, initial, passed); 

console.log(result); // { x: 50, y: 0 } 
+0

子コンポーネントは独自の小道具を変更できないため、これらのコード行をすべてのレンダリングの前に実行する必要がありますか? –

+0

はい、あなたの要件を理解すれば、デフォルトで新しい値を割り当てるだけで、レンダリング時に使用できるローカル変数が必要になります。 Object.assignは小道具を変更しません。 VAR {xと、yは50 =} = this.props.position を、これはyが50のデフォルトを持って行いますと、xは次のようになります。私はあなたがオブジェクトはその後、構造化代入を行うことができます –

0

あなただけthis.props.positionをした場合、デフォルトの小道具は文句を言わないで不足している特定のプロパティをチェックするので、あなたが動作するように、デフォルトの小道具に頼ることができませんでしたオブジェクトは存在しますが、小道具がまったく存在するかどうかを確認します。 1がデフォルトにフォールバックすることができ、他のを渡されたとされていない場合は、両方のデフォルトの小道具をように設定することができ、あなたの子コンポーネントにpositionX &位置j

その後

最も簡単な方法は、二つの小道具を持っているだろうもう一方は

getDefaultProps: function() { 
    return { 
    positionX: 50, 
    positionY: 0 
    }; 
}, 

別のオプションは、そのは、子コンポーネントにで使用されている場所に存在し、YとX値の両方を持つ新しいオブジェクトとその時点でそれを操作するかどうかを確認することです。オブジェクトの非構造と

例:var {x, y=50} = this.props.position

あなたはyが、あなたはまた、デフォルトの値xを与えることができますに渡されるようxは未定義かもしれないと予想される場合

this.props.positionにxまたはyがある場合、デフォルト値を上書きします

+0

それが何であれこれに等しい。 yが存在する場合、それはデフォルトと比較して使用されます –

+0

を避けるためにしようとしているものです – finalfreq

+0

実際にthis.propsの値を変更し、構造化変数のデフォルトを作成しない方法がありますか? –