【发布时间】:2021-03-08 16:05:30
【问题描述】:
const [dates, setDates] = useState([]);
const handleClick = (day) => {
let newArray = [...dates];
let indexItem = newArray.indexOf(day);
indexItem === -1 ? newArray.push(day) : newArray.splice(indexItem, 1);
setDates(newArray);
};
useEffect(() => {
console.log(dates);
}, [dates]);
return(
<DayPicker selectedDays={dates} onDayClick={handleClick} />
)
是否可以更新我的代码以使状态仅包含单击一次并在单击两次时删除的日期?
有点能够在状态中切换日期。
我的函数只在元素添加 2 次后才移除元素,因此 atm 无法从数组中移除重复元素。
handleClick 中的 day 参数以字符串形式返回值,例如:
Fri Mar 05 2021 12:00:00 GMT+0100 (Central European Standard Time)
当 i console.log() 在浏览器中约会时,它是这样的:
0: Wed Mar 03 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
1: Wed Mar 10 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
2: Wed Mar 17 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
3: Wed Mar 03 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
4: Wed Mar 10 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
5: Wed Mar 17 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
你可以看到重复的,如果我再次点击同一天,结果会是
0: Wed Mar 03 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
1: Wed Mar 10 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
2: Wed Mar 17 2021 12:00:00 GMT+0100 (Central European Standard Time) {}
而不是
[]
提前致谢!
【问题讨论】:
-
这是模块react-day-picker.js.org。但是
function中的day参数返回一个string,正如上面提到的那样:) -
@CertainPerformance 我更新了我的问题,提供了有关控制台输出的更多详细信息,如果您可以看一下 :)
-
您调用
array .splice()并忽略返回值。所以你永远只添加元素。每当我使用一个我很容易忘记细节的函数时,我就养成了访问mdn docu 的习惯。
标签: reactjs react-hooks use-effect use-state