React提交后无法清空选中状态问题求助
React提交数据后重置选中的星期选项
问题出在你注释的代码里:直接修改了原state中的对象属性(ele.select = false),既违反了React状态不可变的规则,也没有调用setWeekdays触发状态更新,所以UI不会同步取消选中状态。
正确的实现方式是创建新的数组和对象来更新状态,具体修改如下:
const onSubmit = async () => { // 判断是否有选中的日期 const hasSelected = weekdays.some(item => item.select === true); if (hasSelected) { // 提取选中的日期全名并更新days状态 const selectedDays = weekdays .filter(item => item.select) .map(item => item.fullName); setDays(selectedDays); close(); // 重置所有星期选项的选中状态 const resetWeekdays = weekdays.map(day => ({ ...day, // 复制原对象的所有属性 select: false // 将select重置为false })); setWeekdays(resetWeekdays); } else { toast.error('至少选择一天!', { position: toast.POSITION.BOTTOM_LEFT }); } };
关键说明:
- 用
Array.some()替代every判断是否有选中项,逻辑更直观(只要存在一个选中项就返回true) - 筛选选中项时,
filter(item => item.select)即可,无需多余的条件判断 - 重置状态时,通过
map创建新对象:用展开运算符...day复制原对象属性,再覆盖select为false,保证状态更新符合React不可变原则,这样React才能检测到状态变化并刷新UI - 移除了else分支中错误的
setDays(...weekdays),该操作会导致days被设置为数组的单个元素,不符合需求
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

