类对象在减速器中无法正常工作

时间:2019-04-19 13:42:11

标签: reactjs redux

我有一个用户模型(es6类),并且正在使用新键盘创建对象,并将该对象传递给initialState到我的userReducer函数。如何根据操作更新模型。

例如如果我尝试调度操作以更改userModel中的isLogging,则在记录器中prevState和nextState是相同的。

https://i.ibb.co/0CBSZ5v/Screenshot-from-2019-04-19-19-07-44.png

User Reducer

import { USER } from '../constants'
import type { IUserInitialState, IUserAction } from '../types'
import { UserModel } from '../models'

const initialState: IUserInitialState = new UserModel()

export const userReducer = (state: IUserInitialState = initialState, action: IUserAction): Object => {
    console.log(state)
    switch (action.type) {
        case USER.LOGIN_REQUEST:
            console.log(state)
            initialState.userIsLogging = action.payload
            return initialState
        default:
            return state
    }
}

------------------------------
User Action

export const loginRequest = (type: boolean): Object => {
    return {
        type: USER.LOGIN_REQUEST,
        payload: type
    }
}

用户模型

导出类UserModel {

user: IUserModel = {
    username: '',
    password: '',
    isLogging: false
}

set userModel(userObject: IUserModel) {
    this.user = userObject
}

set userIsLogging(logging: boolean) {
    this.user.isLogging  = logging
}

get userIsLogging() {
    return this.user.isLogging
}

}



  [1]: https://i.ibb.co/0CBSZ5v/Screenshot-from-2019-04-19-19-07-44.png

2 个答案:

答案 0 :(得分:1)

您使用的减速器错误。

1-创建状态时,请确保它只是没有任何方法的原始类型。

2-减速器负责在任何操作上创建新状态。但是您只返回初始状态。你应该有类似的东西

sub.toString()

3-您可能要检查sagas。您不必自己处理所有这些异步逻辑

答案 1 :(得分:0)

Reducer必须是纯函数。它应该基于先前的状态和操作返回新的状态。

请不要更改先前的状态。而是创建一个新实例,在那里进行所需的更改,最后返回该新实例。

我强烈建议您观看redux github page中的视频。没有更好的解释,来自redux作者。