You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redux Toolkit的slice中向action传递对象参数

正确传参方案

1 先修正authSlice的代码

你当前注释了action.payload的解构逻辑,直接使用userId、userNickame会抛出变量未定义的报错,首先放开注释完成参数解构:

import { createSlice } from '@reduxjs/toolkit';

const initialState = {
    userId : null,
    // 注意此处字段拼写是userNickame(少了一个n),如果是笔误建议统一改为userNickname,避免后续取值不匹配
    userNickame : "",
    isAuth : false,
    isAdmin : false, 
}

export const authSlice = createSlice({
    name : 'auth',
    initialState,
    reducers : {
        authUser : (state, action) => {
            // 放开此处注释,从payload读取传入的参数
            const {userId, userNickame} = action.payload;
            state.userId = userId;
            state.userNickame = userNickame;
            state.isAuth = true;
        },
    },
})

export const { authUser } = authSlice.actions
export default authSlice.reducer

2 调用dispatch时的传参写法

Redux Toolkit的action creator默认仅接收一个参数作为payload,所以你需要把两个参数封装为一个对象传入即可,同时注意你的useSelector取值路径需要匹配slice的命名:

//...

const dispatch = useDispatch();
// slice的name是auth,所以取值路径需要加上auth层级
const userId = useSelector((state) => state.auth.userId);
const userNickname = useSelector((state) => state.auth.userNickame);

//...

// 传入包含两个属性的对象作为payload
dispatch(authUser({
  userId: userId,
  userNickame: userNickname
  // 如果前面修正了字段拼写为userNickname,这里的key也要对应改为userNickname
}));

内容的提问来源于stack exchange,提问作者Andrew Lisov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:45:10