我需要根据另一种状态的实际值来更新一种状态。感觉在另一个回调中设置状态是一个坏主意。
您知道是否有更好的解决方案?
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
答案 0 :(得分:1)
这不是一个好习惯。根据{{3}}
您不必使用很多状态变量。状态变量可以很好地容纳对象和数组,因此您仍然可以将相关数据分组在一起。但是,与类中的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
将日期作为具有日和月字段的对象。 希望对您有帮助。