У меня в state хранится объект:
const [objCounter, setObjCounter] = useState({
title: "counter",
date: new Date()
});
При клике на кнопку вызывается
changeTitle
и к свойству
title
в конце добавляется случайное число из функции
getRandomNumber
:
const getRandomNumber = () => {
console.log("getRandomNumber called");
return Math.round(Math.random() * 20);
};
Вопрос:
Почему в таком варианте при клике на кнопку
getRandomNumber
сработает только 1 раз:
const changeTitle = () => {
setObjCounter({
...objCounter,
title: `new title ${getRandomNumber()}` // console.log вызывается один раз
})
};
а в таком (с передачей callback с предыдущим состоянием) - два раза?
const changeTitle = () => {
setObjCounter((prevState) => ({
...prevState,
title: `new title ${getRandomNumber()}` // console.log вызывается два раза
}));
}
Какой вариант правильный?
Полная
песочница здесь.