ГлавнаяБлогErrors / Fixes{date.toString()}
Errors / Fixes5 сентября 2026 г.2 мин

{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;

Теперь, когда вы нажимаете кнопку, значение даты будет правильно обновлено и отображено в интерфейсе.

Практические советы

  1. Используйте функциональное состояние: Когда вам нужно изменить состояние на основе предыдущего состояния, используйте функцию-回调来翻译这段话。