You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-router location state为空 DateObject存路由状态跳转后丢失

问题根因

react-router的路由state仅支持原生可序列化的JSON数据类型,而react-multi-date-picker的DateObject是第三方库自定义的类实例,路由在做状态跨页面传递/持久化时,会自动对state做序列化处理,自定义类的原型、内置私有属性都会在序列化过程中丢失,所以跳转后拿到的就是空对象。

解决方案

方案1:转基础类型存储(推荐)

存储时把DateObject转成可序列化的时间戳/ISO字符串,读取时再转回DateObject实例即可:

// 存储时的逻辑
import DateObject from "react-multi-date-picker";

let history = useHistory();
// 转成时间戳(数字类型可直接序列化)
history.replace({pathname: "/", state: {dateTimestamp: new DateObject().valueOf()}});
history.push({pathname: "/another-path"});
// 回退后读取的逻辑
import DateObject from "react-multi-date-picker";

let location = useLocation();
// 读取时转回DateObject实例
const date = location.state?.dateTimestamp ? new DateObject(location.state.dateTimestamp) : null;
console.log(date);

方案2:更换存储载体

如果需要避免来回转换,可以选择把日期存在全局状态(比如useContext、Zustand、Redux)中,全局状态存在应用内存里,路由跳转不会触发状态序列化,不会丢失实例属性。如果需要刷新页面也保留状态,可以把序列化后的时间戳存在localStorage中,读取时再转成DateObject实例。

内容的提问来源于stack exchange,提问作者Henrique

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 23:36:10