我有一个用户模型(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
答案 0 :(得分:1)
您使用的减速器错误。
1-创建状态时,请确保它只是没有任何方法的原始类型。
2-减速器负责在任何操作上创建新状态。但是您只返回初始状态。你应该有类似的东西
sub.toString()
3-您可能要检查sagas。您不必自己处理所有这些异步逻辑
答案 1 :(得分:0)
Reducer必须是纯函数。它应该基于先前的状态和操作返回新的状态。
请不要更改先前的状态。而是创建一个新实例,在那里进行所需的更改,最后返回该新实例。
我强烈建议您观看redux github page中的视频。没有更好的解释,来自redux作者。