javascript 如何在视图层渲染中使用对象的更新状态?

gz5pxeao  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(129)

我正在处理一个项目,我正在更改日期值的状态,并希望在视图层渲染中使用它。然而,当我试图在那里使用它作为<h2>{appointmentDate.toLocaleDateString()}</h2>时,它会抛出错误***“Cannot read properties of undefined(阅读'toLocaleDateString')".**
另外,如果我只是使用“appointmentDate”<h2>{appointmentDate}</h2>,它会抛出错误
**“Objects are not valid as a React child(found:[object Date])。如果你想呈现一个子元素的集合,请使用数组。
我想在h2标签中使用“appointmentDate”的值(在useState中定义,由“handleDate”函数更改)。请提供在函数外使用更新值的解决方案。
代码如下:

import { useRef, useState } from "react";
import { Calendar } from "react-date-range";
import { addDays } from "date-fns";
import { format } from "date-fns";
import "react-date-range/dist/styles.css"; // main css file
import "react-date-range/dist/theme/default.css"; // theme css file

export default function App() {
  const [appointmentDate, setAppointmentDate] = useState(new Date());

  const handleDate = (e) => {
    const clickedDate = e.target.value;
    setAppointmentDate(clickedDate);
    document.getElementById("select-calendar").innerHTML =
      appointmentDate.toLocaleDateString();
    console.log(appointmentDate);
  };
  return (
    <div className="App">
      <span id="select-calendar">Select calendar</span>
      <div onClick={handleDate}>
        <Calendar
          onChange={(item) => setAppointmentDate(item)}
          date={appointmentDate}
          className="stay-date"
          name="appointmentDate"
        />
      </div>
      <h2>{appointmentDate.toLocaleDateString()}</h2>
    </div>
  );
}

下面是codepen链接:https://codesandbox.io/s/happy-maxwell-6x28nx?file=/src/App.js:23-1034
我尝试使用useRef,但仍然抛出相同的错误。
PS:这是我在StackOverflow上的第一个问题。如果我不能正确地解释这个问题,请原谅我。

vuktfyat

vuktfyat1#

你可以这样做:

export default function App() {
  const [appointmentDate, setAppointmentDate] = useState(new Date());

  const handleDate = (date) => {
    setAppointmentDate(new Date(date));
  };
  return (
    <div className="App">
      <span id="select-calendar">Select calendar</span>
      <div>
        <Calendar
          onChange={handleDate}
          date={appointmentDate}
          className="stay-date"
          name="appointmentDate"
        />
      </div>
      <h2>{appointmentDate.toLocaleDateString()}</h2>
    </div>
  );
}

您没有在日历onchange事件上调用handleDate函数。另外,在更改时,它以字符串格式返回日期,您正在设置该字符串以状态,因此出现错误。所以你首先需要把它转换成date对象,然后设置状态。

相关问题