我想在单击登录功能后将state.name
设置为“Alex”和age
加1,并将电子邮件设置为action.payload
。
这是我的用户状态切片
const userSlice = createSlice({
name: "user",
initialState: { value: { name: "", age: 0, email: "" } },
reducers: {
login: (state, action) => {
state.value.name = "Alex"
state.value.age = state.value.age + 1
state.value.email = action.payload
},
}
})
这是我的useDispatch
function Login() {
const dispatch = useDispatch()
return (
<div>
<button
onClick={() => {
dispatch(login({ email: 'example@gmail.com' }))
}}
>
Login
</button>
</div>
)
}
发生错误:Objects are not valid as a React child (found: object with keys {email}). If you meant to render a collection of children, use an array instead.
我正在使用Redux工具包。
1条答案
按热度按时间bq3bfh9z1#
看起来你很可能在一个组件中选择了
state.user.value
状态,并呈现了组成部分,即value.name
、value.age
和value.email
。这是很好的,直到你在调度login
动作时更新state.user.value.email
,使其具有{ email: 'example@gmail.com' }
的有效负载值。这使得value.email
成为一个对象,并且不可呈现。使用您要保存到state中的 * 确切 * 有效负载值来调度
login
操作:或者在case reducer中从有效负载中正确地解包
email
属性:我还建议简化状态,以取消嵌套要存储的实际值。
示例:
...