最初のレンダリング時にプラグインを介して適用されるクラスを維持しながら、状態オブジェクトの真実性に基づいて条件付きで要素にクラス名を追加したいと考えています。他のクラスを削除せずにReactに条件付きクラスを追加するにはどうすればよいですか?
動作しない例:同上
import React from 'react';
import classnames from 'classnames';
export default class CoolThing extends React.Component{
constructor(props) {
super(props);
}
componentDidMount() {
// This plugin sets classes to the this.refs.root DOM element when it initializes
$(this.refs.root).jqueryPluginIHaveToUseThatSetsClassesAndDoesStuff();
}
handleClick =() => {
this.setState({
active: true
})
}
render() {
const classNames = classnames({
active: this.state.active
});
return (
<div ref="root" className={ classnames } onClick={ this.handleClick }></div>
)
}
}
が、これはまた、レンダリングでは失敗します。
render() {
return (
<div ref="root" className={ this.state.active ? "CoolThing active" : "CoolThing" } onClick={ this.handleClick }></div>
)
}
所望の結果は "CoolThing" クラスを持っているでしょうjqueryPluginIHaveToUseThatSetsClassesAndDoesStuff
が適用されたクラスに加えて、常にこの例のdivタグに適用されます。ユーザーの操作によっては、active
クラスも適用され、以前に適用されたクラスは上書きされません。
私は避けたい:
- を
active
クラスまたは類似かかり、ネストされたdiv要素を追加することthis.refs.root
参照 - 経由でjQueryのaddClassを使用して...構造はそのまま残るthemarkup持つことはかなり重要です
を試してみてください?そうすれば、彼らは迷子にならないでしょう。 –