gpt4 book ai didi

javascript - Redux reducer 将嵌套对象添加到状态中

转载 作者:行者123 更新时间:2023-11-28 18:08:37 24 4
gpt4 key购买 nike

在使用 React/Redux 为我的应用程序制作 UI 时,我的头撞到了墙上。问题是,当我的操作被客户端变异状态触发时,它会将我正在更改的状态片段变成嵌套对象。

在本例中,我尝试将状态 loginForm 部分更改为 "login""signUp"。当我触发操作时,prop loginForm(从状态传递到我的组件)如下所示:this.props.loginForm.loginForm = "login"

客户端代码:

import React from "react";

import LoginForm from "../minor/LoginForm";

const Login = React.createClass({

displayForm(){

if (this.props.loginForm === "login"){
return <span>Login</span>
} else if (this.props.loginForm === "signUp"){
return <span>Sign Up</span>
} else {
console.log("meh")
}

},

renderLogin(){
this.props.chooseForm("login");
},

renderSignUp(){
this.props.chooseForm("signUp");
},

render(){

return(

<div className="loginBox">
<h1>Slots</h1>
<button onClick={this.renderLogin} name="login" >Login</button>
<button onClick={this.renderSignUp} name="signUp" >Sign Up</button>
{this.displayForm()}
</div>
)
}
});

export default Login;

userActions.js

export function chooseForm(form){
console.log("choosing form")

return {
type: "CHOOSE_FORM",
form
}
}

userReducer.js

export function loginForm(state=null, action){

switch(action.type){

case "CHOOSE_FORM":

return {...state, loginForm: action.form };


default:
return state;
}
}

这里的目的是显示与 this.prop.loginForm 的值关联的正确组件,由于我上面提到的问题,这是无法实现的。

更新

mainReducer.js(组合Reducer)

import {combineReducers} from "redux";
import {routerReducer} from "react-router-redux";

// reducers
import { loginStatus, loginForm }from "./userReducer";

const rootReducer = combineReducers({ loginStatus, loginForm, routing: routerReducer});

export default rootReducer;

最佳答案

在没有看到其余代码的情况下,我将做出一个有根据的猜测,并说这看起来可能是合并的Reducers 文件中的问题。如果您正在使用combineReducers,请继续阅读...

您可能会将 Redux 状态设置为:

loginForm: userReducer
// so the Redux state would be set have a property in it
// 'loginForm' set to {loginForm:'login'}

解决方案:

将您的combineReducers修改为:

loginForm: userReducer.loginForm

关于javascript - Redux reducer 将嵌套对象添加到状态中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42102606/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com