我正在创建一个NextJs14Electron 商务应用程序,使用Redux工具包进行状态管理.我已经创建了一个片,使用我对RTK 2.0语法的最好理解来调用用户数据,以便可以将其添加到我的用户状态.
"use client";
import { buildCreateSlice, asyncThunkCreator } from "@reduxjs/toolkit";
const createSliceWithThunks = buildCreateSlice({
creators: {
asyncThunk: asyncThunkCreator,
},
});
const initialState = {
user: {
_id: "",
fname: "",
lname: "",
email: "",
streetAddress: "",
postalCode: "",
city: "",
county: "",
country: "",
},
loading: false,
error: null,
};
const userSlice = createSliceWithThunks({
name: "user",
initialState,
reducers: (create) => ({
fetchUser: create.asyncThunk(
async (_, thunkApi) => {
const response = await fetch("/api/user");
if (!response.ok) {
throw new Error("Failed to fetch user data");
}
const userData = await response.json();
console.log(userData);
return userData;
},
{
pending: (state) => {
(state.loading = true), (state.error = null);
},
fulfilled: (state, action) => {
state.loading = false;
state.data = action.payload;
},
rejected: (state, action) => {
state.loading = false;
state.error = action.error.message;
},
}
),
}),
});
export const { fetchUser } = userSlice.actions;
export default userSlice.reducer;
这是我的API/用户路由:
import { connectDb } from "@dbConfig/db";
import User from "@models/UserModel";
import { getServerSession } from "next-auth";
import { NextResponse } from "next/server";
export async function GET(req, res) {
const session = getServerSession(); //using my session data from NextAuth to get email to find user in mongodb
try {
const email = (await session).user.email; //I don't know why prettier formatted this line like this, the code breaks if I change it.
connectDb();
const user = await User.findOne({ email });
console.log(user);
return NextResponse.json({ message: "User found:", user }, { status: 201 });
} catch (error) {
console.log(error);
}
}
这个调用运行得很好,我正在从我的数据库中获取用户数据,当我转到localhost:3000/api/user时可以看到它.
问题是,当我try 使用Redux-Toolkit获取它,然后将我的用户状态设置为收到的数据时.
当我在浏览器中判断Redux-DevTools时,我可以看到数据,但它只显示在data
属性下,而不是实际更新状态.我不知所措,不知如何前进.如有任何帮助,我们不胜感激.