Alertという名前のReactClassがあります。そのrenderメソッドは、要素の作成中に渡されたタイプに応じて、クラスalert alert-success
またはalert alert-error
のdivを返します。アラート要素のタイプに基づいてクラスを追加する方法を知りたいだけです。
これが私の試みです:
var Alert = ReactClass({
render: function() {
return <div className="alert {this.props.type}">{this.props.message}</div>
}
});
var successAlert = React.createElement(Alert, {
type: 'alert-success'
message: 'Information saved successfully!!'
});
JSXテンプレートがコンパイルされると、this.props.type
は要素に渡されたクラスに変換されません。これを達成する方法は?
質問に対する答えを見つけたようです。私たちは単にこのようなことをすることができます:
var Alert = ReactClass({
render: function() {
return <div className={"alert " + this.props.type}>{this.props.message}</div>
}
});
クラスをテンプレートエバリュエーター内に配置するだけです{ }
この場合。小道具と状態に基づいてクラス文字列を作成します。
これが他の人に役立つことを願っています。
これを実現する1つの方法は、すべてのクラスを含む文字列を作成し、それをコンポーネントのclassName
に設定することです。
var Alert = ReactClass({
var yourClassName = 'alert ';
// Add any additional class names
yourClassName += this.props.type + ' ';
render: function() {
return <div className={yourClassName}>{this.props.message}</div>
}
});
または、クラス名を配列に格納し、使用する準備ができたらクラスフレンドリーな文字列に変換することもできます。
var Alert = ReactClass({
var yourClassArray = [];
// Add any additional class names
yourClassArray.Push('alert');
yourClassArray.Push(this.props.type);
var classString = yourClassArray.join(' ');
render: function() {
return <div className={classString}>{this.props.message}</div>
}
});
classnames パッケージを見てください。あなたはこのようなことをすることができます:
className={classNames('alert', `alert-${type}`)}
または
className={classNames({
'alert': true,
'alert-success': success,
'alert-error': error
})
JavaScriptを使用できます テンプレートリテラル
var Alert = ReactClass({
render: function() {
return <div className={`alert ${this.props.type}`}>{this.props.message}</div>
}
});
コードは次のように記述できます。
const Alert = ({type, message}) =>
<div className={`alert ${type}`}>{message}</div>