reactjs RangeError:合并本地存储后时间值无效

9nvpjoqh  于 2023-02-22  发布在  React
关注(0)|答案(1)|浏览(99)

我在一个论坛上工作,使用一个用户填写的表单,我把数据作为一个对象存储在一个数组中。我存储的数据包括主题的标题,消息,作者和日期。这些数据存储在一个topic数组中,我把它Map到屏幕上,这样用户就可以看到所有当前的主题。谁创建了它们以及创建它们的日期。我还开始使用localStorage,这样我就可以保存我的数据并进行测试,以确保页面刷新后一切看起来都很好。

const [topic, setTopic] = useState(() => {
  const topicJson = localStorage.getItem("topic");
  return topicJson ? JSON.parse(topicJson) : [];
});

const updatedTopic = [
      ...topic,
      {
        title: title,
        message,
        author: "Dagger",
        date: new Date(),
      },
    ];

    setTopic(updatedTopic);

  };

这就是我正在使用的代码,它按预期工作,但是当我Map数组以在屏幕上发布数据时,我在显示日期时遇到了麻烦,我使用date-fns是因为它显示的日期正是我想要的。
例如:2/19 9:39PM。这就是我希望日期在屏幕上的样子,而使用date-fns是我发现的唯一能让它看起来像这样的方法。

{topic
 .sort((a, b) => b.date - a.date)
 .map(({ date }, index) => (
   <tr>
      {<td>{format(date, "M/dd h:mma")}</td>}
   </tr>
))}

这是我用来Map数组以显示日期的代码。在添加localStorage之前,它工作正常。当我删除format并将代码显示为date时,它工作正常,但包括格式会给我带来以下错误:

throw new RangeError('Invalid time value');
// Convert the date in system timezone to the same date in UTC+00:00 timezone.
// This ensures that when UTC functions will be implemented, locales will be compatible with them.
n3ipq98p

n3ipq98p1#

我认为你使用的是Date对象来存储日期,而JSON.stringify不能处理Date对象。你应该使用Date方法。
简单的方法只是保存不是日期对象,但ISO字符串。
日期.到ISO字符串()
表中:

{<td>{format(parseISO(date), "M/dd h:mma")}</td>}

相关问题