redux React还原创建切片或创建还原器[已关闭]

iqih9akk  于 2022-11-12  发布在  React
关注(0)|答案(1)|浏览(168)

已关闭。此问题需要更多的focused。当前不接受答案。
**想要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

去年关闭了。
Improve this question
我是一个初学者,我不知道createSlice和createReducer之间是否有区别。
我应该用哪一个?
第二,我今天看了一个教程,这个家伙只是做了一个store.js文件和一个userslice.js文件,非常简单。
但是他做了一点不同于redux文档的地方。他在userSlice.js的末尾导出了三个CONST,而不是像文档中那样导出了两个。(我已经做了注解)如果我把state.user.user改为state. user. wtf ......我会在一段时间后遇到错误,因为一些组件不再能够访问user对象了。
用户切片

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

export const userSlice = createSlice({
  name: "user",
  initialState: {
    user: null,
  },
  reducers: {
    login: (state, action) => {

      state.user = action.payload;
    },

    logout: (state) => {
      state.user = null;
    },
  },
});

export const { login, logout } = userSlice.actions;

export const selectUser = (state) => state.user.user; // What is that ? and why is it state.user and then a third user Object ???

export default userSlice.reducer;

在app.js中,他发出命令

const user = useSelector(selectUser);

instead 

  const user = useSelector(state => state.user.user);

我真的不明白
store.js文件

import { configureStore } from '@reduxjs/toolkit';
import userReducer from '../features/userSlice'

export default configureStore({
  reducer: {
    user: userReducer,
  },
});

有人能解释一下吗?我很困惑

tvokkenx

tvokkenx1#

根据您关于createSlicecreateReducer的问题的第一部分:
我不知道createSlice和createReducer之间是否有区别。
一个很好的帮助来源是阅读Redux Toolkit文档,其中写道:
创建切片:一个函数,它接受初始状态、一个充满化简函数的对象和一个“切片名”,并自动生成与化简器和状态相对应的动作创建者和动作类型。
创建缩减器:一个简化Redux reducer函数创建的实用程序。它在内部使用Immer,通过在Reducer中编写“可变”代码,极大地简化了不可变的更新逻辑,并支持直接将特定的操作类型Map到case reducer函数,当操作被调度时,case reducer函数将更新状态。
重要声明:
在内部,createSlice使用createActioncreateReducer,[...]
你可以把createSlice理解为一个函数,它使用createReducer或一个助手来绑定东西。
关于你问题的第二部分:

export const selectUser = (state) => state.user.user; // What is that ? and why is it state.user and then a third user Object ???

Selectors是使用Redux查看应用程序时发现的一种非常常见的模式。
“选择器”只是一个函数,它接受Redux状态作为参数,并返回从该状态派生的数据。
选择器所做的就是访问状态并从中获取一些东西,可能要在React组件中使用:

import { useSelector } from 'react-redux';
const App => () => {
  const user = useSelector(selectUser); 
  return <div>My name is {user.name}</div>
}

相关问题