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个状态变量。