{date.toString()}
Cannot Update Variable with Onclick Event in React JS ## Проблема с обновлением переменной при нажатии кнопки в React JS Недавно столкнулся с проблемой при попытке обновить переменную даты...
Ca
ot Update Variable with Onclick Event in React JS
Проблема с обновлением переменной при нажатии кнопки в React JS
Недавно столкнулся с проблемой при попытке обновить переменную даты при нажатии кнопки в React JS. Это приложение должно изменять текущую дату на определенное количество месяцев и дней после нажатия кнопки. Однако, при нажатии кнопки значение даты изменяется только в консоли, но не отображается в интерфейсе пользователя.
Анализ кода и решение проблемы
Для начала давайте рассмотрим предоставленный код и разберем его по частям:
Код DateTester.js
import { useState } from 'react';
const DateTest = () => {
const [date, updateDate] = useState(new Date());
const ChangeDate = () => {
date.setDate(date.getDate() + 77);
date.setMonth(date.getMonth() + 8);
updateDate(date);
console.log("value of date is: ", date);
};
return (
<>
<h1>{date.toString()}</h1>
<button onClick={ChangeDate}>change</button>
</>
);
};
export default DateTest;
Код App.js
import './App.css';
import { useState } из 'react';
import DateTest from './DateTester.js';
function App() {
return (
<div className="App">
<DateTest />
</div>
);
}
export default App;
Ошибка и ее причина
Проблема заключается в том, что переменная date создается один раз при загрузке компонента и не изменяется внутри функции ChangeDate. Вместо этого вы должны использовать функциональное состояние для изменения значения date.
Решение проблемы
Чтобы исправить эту проблему, следует использовать функциональное состояние useState для обновления даты:
import { useState } from 'react';
const DateTest = () => {
const [date, updateDate] = useState(new Date());
const ChangeDate = () => {
updateDate((prevDate) => {
const newDate = new Date(prevDate);
newDate.setDate(prevDate.getDate() + 77);
newDate.setMonth(prevDate.getMonth() + 8);
return newDate;
});
console.log("value of date is: ", date);
};
return (
<>
<h1>{date.toString()}</h1>
<button onClick={ChangeDate}>change</button>
</>
);
};
export default DateTest;
Теперь, когда вы нажимаете кнопку, значение даты будет правильно обновлено и отображено в интерфейсе.
Практические советы
- Используйте функциональное состояние: Когда вам нужно изменить состояние на основе предыдущего состояния, используйте функцию-回调来翻译这段话。