Ifステートメントを使用するよりも条件付きでプロップを渡すより良い方法があるかどうかを知りたいです。
たとえば、私は今持っています:
_var parent = React.createClass({
propTypes: {
editable: React.PropTypes.bool.isRequired,
editableOpts: React.PropTypes.shape({...})
},
render: function() {
if(this.props.editable) {
return (
<Child editable={this.props.editableOpts} />
);
} else {
// In this case, Child will use the editableOpts from its own getDefaultProps()
return (
<Child />
);
}
}
});
_
If文なしでこれを書く方法はありますか?私はJSXの一種のインラインIFステートメントの線に沿って何かを考えていました:
_var parent = React.createClass({
propTypes: {
editable: React.PropTypes.bool.isRequired,
editableOpts: React.PropTypes.shape({...})
},
render: function() {
return (
<Child
{this.props.editable ? editable={this.props.editableOpts} : null}
/>
);
}
});
_
まとめ:Child
のプロップを定義する方法を見つけようとしていますが、Child
のような値を渡す(または他の何かをする)それでもChild
自身のgetDefaultProps()
からそのプロップの値を引き出します。
あなたはあなたのアイデアに近かった。 undefined
をプロップに渡すことは、それをまったく含めないのと同じであり、それでもデフォルトのプロップ値をトリガーすることがわかります。したがって、次のようなことができます。
var parent = React.createClass({
propTypes: {
editable: React.PropTypes.bool.isRequired,
editableOpts: React.PropTypes.shape({...})
},
render: function() {
return <Child
editable={this.props.editable ?
this.props.editableOpts :
undefined}
/>;
}
});
props
変数を定義します。
let props = {};
if (this.props.editable){
props.editable = this.props.editable;
}
そして、それをJSXで使用します。
<Child {...props} />
コード内のソリューションは次のとおりです。
var parent = React.createClass({
propTypes: {
editable: React.PropTypes.bool.isRequired,
editableOpts: React.PropTypes.shape({...})
},
render: function() {
let props = {};
if (this.props.editable){
props.editable = this.props.editable;
}
return (
<Child {...props} />
);
}
});
ソース、React documentation: https://facebook.github.io/react/docs/jsx-in-depth.html#spread-attributes
this.props.editable
にスプレッド演算子を追加します:
<Child {...(this.props.editable ? {editable: {this.props.editableOpts}} : undefined)} >
動作するはずです。
var parent = React.createClass({
propTypes: {
editable: React.PropTypes.bool.isRequired,
editableOpts: React.PropTypes.shape({...})
},
render: function() {
return (
<Child
editable={this.props.editable && this.props.editableOpts}
/>
);
}
});
条件付きで、このような小道具を渡すことができます
実際、小道具がブール値の場合、条件を実装する必要はありませんが、インライン条件で小道具を追加する場合は、次のように記述する必要があります。
const { editable, editableOpts } = this.props;
return (
<Child {...(editable && { editable: editableOpts } )} />
);
それがあなたを混乱させないことを願っています。 {...
は、存在する小道具を渡すような拡散演算子であることを意味します:{...props}
そしてその editable &&
は、editable
がtrue
である場合、{ editable: editableOpts }
オブジェクトは{...
このような新しいオブジェクトを作成します:{...{ editable: editableOpts }}
という意味はeditable={editableOpts}
ただしthis.porps.editable
はtrueです。