之前我们强调过 redux 不支持非序列化数据
它自带了序列化检查 如果存入非序列化数据 通常情况数据也可以正常存储进去 但是会报异常
大体表达的就是 你这是一个非序列化数据 我们无法提供很好的支持 如果后面出问题了 不要怪我们
那么 具体什么叫非序列化数据呢?
简单说:非序列化数据指的是无法被直接转化为字符串格式的数据
在Redux中,非序列化数据无法被存储在状态树中或通过Redux的action进行传递。
Redux要求存储在状态树中的数据必须是可序列化的,这样可以确保数据的一致性和可靠性。可序列化的数据可以被转化为字符串或其他格式,并可以在不同的环境中传递和存储。
常见的非序列化数据包括一下几种
函数:在Redux中,不能将函数作为状态树的一部分进行存储。例如,以下代码是不允许的:
const initialState = {
counter: 0,
increment: () => {
// increment logic
}
};
Date对象:Date对象是表示日期和时间的内置JavaScript对象。Redux不支持将Date对象直接存储在状态树中。如果需要在Redux中存储日期,可以将其转化为字符串或时间戳格式。
const initialState = {
currentDate: new Date().toString()
};
或者
const initialState = {
currentDate: new Date().getTime()
};
Map和Set:Map和Set是ES6中的数据结构,它们允许我们存储键值对或唯一值的集合。Redux不支持将Map和Set直接存储在状态树中。如果需要在Redux中存储这些数据结构,可以将其转化为数组或对象的形式。
例如 不支持
const initialState = {
users: new Map([
['1', { id: '1', name: 'John' }],
['2', { id: '2', name: 'Jane' }]
])
};
但你写成
const initialState = {
users: [
{ id: '1', name: 'John' },
{ id: '2', name: 'Jane' }
]
};
这样一个对象格式就OK了