【发布时间】:2021-03-14 20:13:00
【问题描述】:
基本上,我有几个按钮。我希望用户能够选择多个按钮。
我尝试使用功能组件并使用 useState 挂钩将按钮状态存储为对象。单击按钮时状态会相应更新,但按钮的道具不会更新。当 props.isActive 发生变化时,我尝试使用 useEffect 重新渲染组件,但这不起作用。
使用类组件,这完全符合预期。我只是想了解为什么会这样。如果有人能提供见解,我将不胜感激。谢谢。
功能组件
const View = (props) => {
var [buttons, setButtons] = useState([
{ name: "Small", isActive: false },
{ name: "Large", isActive: false },
]);
const handleClick = (index) => {
let tmp = buttons;
tmp[index].isActive = !tmp[index].isActive;
return setButtons(tmp);
};
return (
<div>
{buttons.map((e, index) => {
return (
<MyButtonComponent
key={index}
name={e.name}
isActive={e.isActive}
onClick={() => handleClick(index)}
/>
);
})}
</div>
);
};
类组件
class View extends Component {
state = {
btn: [
{ name: "Small", isActive: false },
{ name: "Large", isActive: false },
],
};
handleClick = (index) => {
let tmp = this.state.btn;
tmp[index].isActive = !tmp[index].isActive;
return this.setState({ ...this.state, btn: tmp });
};
render() {
return (
<div>
{this.state.btn.map((e, index) => {
return (
<MyButtonComponent
key={index}
name={e.name}
isActive={e.isActive}
onClick={() => this.handleClick(index)}
/>
);
})}
</div>
);
}
}
【问题讨论】:
标签: javascript reactjs