redux 在React状态下处理不可序列化的值

py49o6xq  于 12个月前  发布在  React
关注(0)|答案(1)|浏览(162)

我正在为一个用户帐户创建一个reducer,看起来像这样

export class Account {
    id: number;
    user: User;

    constructor(id: number, user: User) {
        this.id = id;
        this.user = user;
    }
}

字符串
我需要一个用户:

export class User {
    name: string;
    email: string;
    token: string;

    constructor(name: string, email: string, token: string) {
        this.name = name;
        this.email = email;
        this.token = token;
    }
}


所以我创建了一个这样的状态:

interface AccountState {
    id: string;
    user?: User;
}


当我像这样更新状态时:

const accountSlice = createSlice({
    name: 'account',
    initialState,
    reducers: {
        setAccount(state, action) {
            state.id = action.payload.id;
            state.user = new User(action.payload.name action.payload.email, action.payload.token)
        },
    }
})


我收到一个错误在状态中检测到一个不可序列化的值,在路径:account.user中。值:{“email”:undefined,“name”:undefined,“token”:undefined}
我可以创建一个state,里面包含所有的user值,而不是user?:User,我看到有一个链接说我可以使用不可序列化的值,但不建议使用,https://redux.js.org/faq/organizing-state#can-i-put-functions-promises-or-other-non-serializable-items-in-my-store-state
所以我的问题是,什么是最好的方法来处理这种情况?我想创建一个userSlice,并从accountSlice更新其状态,但我不确定这是否是正确的方法,我找不到类似的例子在文档中。

ecr0jaav

ecr0jaav1#

理想情况下,你应该使用普通对象而不是类:

export type User = {
    name: string;
    email: string;
    token: string;
}

const accountSlice = createSlice({
    name: 'account',
    initialState,
    reducers: {
        setAccount(state, action) {
            const { id, name, email, token } = action.payload;
            state.id = id;
            state.user = { name, email, token }
        },
    }
})

字符串
类有不可序列化的函数和其他样板,正如你提到的,在Redux中是不鼓励的。

相关问题