在状态更改时更新 ClassNames React js
Update ClassNames on State change React js
有没有办法在状态更改时更新 classNames var(在本例中 'btClasses')?
...
state = {
active: true
};
btClasses = classNames({
'main-class': true,
'activeClass': this.state.active
});
_handleBtn = () => {
this.setState({active: !this.state.active});
}
return (
<button
onClick={this._handleBtn}
className={btClasses} \>
);
...
当前实现中的 btClasses
在第一次渲染后不会更新。要用当前状态计算它的值,你可以把 btClasses
变成一个函数:
class MyComponent extends React.Component {
state = {
active: true,
};
btClasses = () =>
classNames({
'main-class': true,
activeClass: this.state.active,
});
_handleBtn = () => {
this.setState({ active: !this.state.active });
};
render() {
return <button onClick={this._handleBtn} className={this.btClasses()} />;
}
}
或简单地内联它:
render() {
return (
<button
onClick={this._handleBtn}
className={classNames({
'main-class': true,
activeClass: this.state.active,
})}
/>
);
}
目前,您初始化 className
一次,通常,您将其传递为 属性:
class App extends React.Component {
state = {
active: true
};
handleBtn = () => {
this.setState({ active: !this.state.active });
};
render() {
return (
<button
onClick={this.handleBtn}
className={classNames({
"main-class": true,
activeClass: this.state.active
})}
>
{this.state.active ? "true" : "false"}
</button>
);
}
}
有没有办法在状态更改时更新 classNames var(在本例中 'btClasses')?
...
state = {
active: true
};
btClasses = classNames({
'main-class': true,
'activeClass': this.state.active
});
_handleBtn = () => {
this.setState({active: !this.state.active});
}
return (
<button
onClick={this._handleBtn}
className={btClasses} \>
);
...
当前实现中的 btClasses
在第一次渲染后不会更新。要用当前状态计算它的值,你可以把 btClasses
变成一个函数:
class MyComponent extends React.Component {
state = {
active: true,
};
btClasses = () =>
classNames({
'main-class': true,
activeClass: this.state.active,
});
_handleBtn = () => {
this.setState({ active: !this.state.active });
};
render() {
return <button onClick={this._handleBtn} className={this.btClasses()} />;
}
}
或简单地内联它:
render() {
return (
<button
onClick={this._handleBtn}
className={classNames({
'main-class': true,
activeClass: this.state.active,
})}
/>
);
}
目前,您初始化 className
一次,通常,您将其传递为 属性:
class App extends React.Component {
state = {
active: true
};
handleBtn = () => {
this.setState({ active: !this.state.active });
};
render() {
return (
<button
onClick={this.handleBtn}
className={classNames({
"main-class": true,
activeClass: this.state.active
})}
>
{this.state.active ? "true" : "false"}
</button>
);
}
}