已关闭。此问题需要更多的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,
},
});
有人能解释一下吗?我很困惑
1条答案
按热度按时间tvokkenx1#
根据您关于createSlice和createReducer的问题的第一部分:
我不知道createSlice和createReducer之间是否有区别。
一个很好的帮助来源是阅读Redux Toolkit文档,其中写道:
创建切片:一个函数,它接受初始状态、一个充满化简函数的对象和一个“切片名”,并自动生成与化简器和状态相对应的动作创建者和动作类型。
创建缩减器:一个简化Redux reducer函数创建的实用程序。它在内部使用Immer,通过在Reducer中编写“可变”代码,极大地简化了不可变的更新逻辑,并支持直接将特定的操作类型Map到case reducer函数,当操作被调度时,case reducer函数将更新状态。
重要声明:
在内部,
createSlice
使用createAction
和createReducer
,[...]你可以把
createSlice
理解为一个函数,它使用createReducer
或一个助手来绑定东西。关于你问题的第二部分:
Selectors是使用Redux查看应用程序时发现的一种非常常见的模式。
“选择器”只是一个函数,它接受Redux状态作为参数,并返回从该状态派生的数据。
选择器所做的就是访问状态并从中获取一些东西,可能要在React组件中使用: