【发布时间】:2021-09-30 12:49:01
【问题描述】:
这个已经被证明是一段时间以来令人头疼的......
我有一个响应组件,可以更新点击事件的状态。状态是一个简单的布尔值,所以我使用三元运算符来切换状态。
但是,一旦我将第二个函数添加到单击事件状态不再更新,这将起作用。任何想法为什么会发生这种情况以及我做错了什么?
工作代码...
export default function Activity(props) {
const [selected, setSelected] = useState(false);
const selectActivity = () => {
selected ? setSelected(false) : setSelected(true);
return null;
};
const clickHandler = (e) => {
e.preventDefault();
selectActivity();
};
return (
<div
onClick={(e) => clickHandler(e)}
className={`visit card unassigned ${selected ? 'selected' : null}`}
>
//... some content here
</div>
);
}
状态未更新...
export default function Activity(props) {
const [selected, setSelected] = useState(false);
const selectActivity = () => {
selected ? setSelected(false) : setSelected(true);
return null;
};
const clickHandler = (e) => {
e.preventDefault();
selectActivity();
props.collectVisitsForShift(
props.day,
props.startTime,
props.endTime,
props.customer
);
};
return (
<div
onClick={(e) => clickHandler(e)}
className={`visit card unassigned ${selected ? 'selected' : null}`}
>
//... some content here
</div>
);
}
【问题讨论】:
-
这听起来很奇怪,你能试着用
setSelected(prev => !prev)编辑selectActivity吗? -
这段代码应该可以正常工作,你确定你没有将密钥传递给
Activity,它在运行collectVisitsForShift时会发生变化?如果是,那么它将重新安装组件并重置状态。
标签: reactjs onclick event-handling use-state