измените дату с помощью useState reactjs

#reactjs #use-state

Вопрос:

app.js файл

 import React, { useState } from 'react';
import Header from '../header/header';
import Day from '../day/day'
import {BrowserRouter as Router} from 'react-router-dom';
import './app.css';

export default function App() {
        const [currentDay, setDay] = useState(new Date());
        console.log(currentDay)
        function nextDay() {
            console.log("next clicked");
            let nextDate = new Date(currentDay.getTime());
            nextDate = nextDate.setDate(nextDate.getDate()   1);
            setDay(nextDate);

        }
        return (
            <>
            <Router>
                <Header/>
            </Router>
            <Day 
            date={currentDay}
            nextDay={nextDay}/>
            </>
        )
}
 

day.js файл содержит компонент дня

 import React from 'react';
import Moment from 'react-moment';
import './day.css';

export default function Day({date, nextDay}) {
    return (
        <div className="day-container">
            <Moment>{date}</Moment>
            <span onClick={() => nextDay()}>next</span>
        </div>
    )
}
 

экран консоли

После нажатия на кнопку далее объект даты становится меткой времени, а после второго щелчка выдает ошибку(currentDay.getTime не является функцией) Я не понимаю причины этого.

Ответ №1:

Date.prototype.setDate обновляет дату и возвращает значение даты эпохи.

Вам не нужно возвращаемое значение, и вы можете просто:

 let nextDate = new Date(currentDay.getTime());
nextDate.setDate(nextDate.getDate()   1);
setDay(nextDate);
 

Ваша исходная переменная все еще может быть использована.