Reactjs 在setState回调中调用setState可以吗?
我需要根据另一个状态的实际值更新一个状态。感觉在另一个回调中设置状态是个坏主意 你知道有没有更好的解决办法吗Reactjs 在setState回调中调用setState可以吗?,reactjs,Reactjs,我需要根据另一个状态的实际值更新一个状态。感觉在另一个回调中设置状态是个坏主意 你知道有没有更好的解决办法吗 const [day, setDay] = useState(null); const [month, setMonth] = useState(day); const onNextClick = useCallback(() => { setDay((day) => { const newDate = addDays(day, 1); if (newD
const [day, setDay] = useState(null);
const [month, setMonth] = useState(day);
const onNextClick = useCallback(() => {
setDay((day) => {
const newDate = addDays(day, 1);
if (newDate.getMonth() !== day.getMonth()) {
setMonth((month) => addMonths(month, 1));
}
return newDate;
});
}, []); // keep the function reference
这不是一个好的做法。根据
您不必使用许多状态变量。状态变量可以很好地保存对象和数组,因此您仍然可以将相关数据分组在一起。但是,与类中的this.setState不同,更新状态变量总是替换它,而不是合并它。 在您的情况下,您可以有如下内容:
const [date, setDate] = useState(null);
const onNextClick = useCallback(() => {
setDate((date) => {
const newDate = addDays(date.day, 1);
if (newDate.getMonth() !== date.day.getMonth()) {
const newMonth = addMonths(date.month, 1));
}
return {day: newDate, month:newMonth};
});
}, []); // keep the function reference
将日期视为具有日期和月份字段的对象。
跳这个有帮助。它到底在哪里说它不安全?我找不到。我想说这不是一个好习惯。它会产生一些解决您的场景的东西,即使用对象或数组作为状态对象。你所做的不是一个好的做法。考虑更新3个状态变量。