【发布时间】:2022-01-06 14:12:15
【问题描述】:
我不得不在 JS/React 中将一个类重写为一个函数,但我在让钩子在函数中工作时遇到了一些麻烦。
function Switch(props) {
const [isActive, setIsActive] = React.useState();
function handleClick() {
setIsActive(!isActive);
}
const className = `switch ${props.color} ${props.isActive ? 'on' : 'off'}`;
return (
<div className={className}>
<button className="img" onClick={handleClick} />
<h3>{props.title}</h3>
</div>
);
}
ReactDOM.render((
<Switch title="Happiness" color="blue" isActive={false} />
), document.querySelector('#root'));
我尝试更改 handleClick 函数(以及其中的 setIsActive),但无法使其工作。提前感谢您的帮助!
注意:没有添加 CSS,因为该部分工作正常。
【问题讨论】:
-
你当前的 isActive 状态是空的,设置为 false。然后在handleClick函数中这样写 setIsActive(prevState => !prevState)
-
Switch应该受控制还是不受控制?目前,您通过将相同的值作为 prop 以及内部组件状态传递来混合这两个概念。 -
一个值应该只有一个来源。决定
isActive是否应该由这个组件(状态)或组件链中更高级别的东西(道具)管理。如果你把它们混在一起,你迟早会遇到麻烦。
标签: javascript reactjs boolean