const userSlice = createSlice({
  name: 'user',
  initialState,
  reducers: {
    // User k set korche
    setUser: (state, action: PayloadAction<string | null>) => {
      state.user.email = action.payload;
    },
    setLoading: (state, action: PayloadAction<boolean>) => {
      state.isLoading = action.payload;
    },
  },
});

我想澄清action.payload的概念.我为什么在这里使用它,它是做什么的.

推荐答案

给定Redux-Toolkit(RTK)切片:

const userSlice = createSlice({
  name: 'user',
  initialState,
  reducers: {
    // User k set korche
    setUser: (state, action: PayloadAction<string | null>) => {
      state.user.email = action.payload;
    },
    setLoading: (state, action: PayloadAction<boolean>) => {
      state.isLoading = action.payload;
    },
  },
});

并假设出口:

export const { setUser, setLoading } = userSlice.actions;
export default userSlice.reducer;

这个片段生成了一些东西,但最值得注意的是,它生成了上面的导出:

  1. 根据已声明的减法器函数生成setUsersetLoading个动作函数.
  2. 在创建存储对象时传递给存储或与其他减少程序组合以形成减少器树的切片减少器函数.例如configureStore.

我想澄清action.payload的概念.为什么我在这里使用它,以及 是干什么的呢?

所有Redux操作函数都返回一个操作对象,例如具有type属性的对象.RTK生成的操作返回具有payload属性的操作对象.这是您在减速器功能中看到的action.payload.

例如,如果您从UI调度setUser操作.

dispatch(setUser("Drew"));
dispatch(setUser(null));

这首先使用字符串参数"Drew"|null调用setUser操作,并返回一个操作对象{ type: "user/setUser", payload: "Drew" }|{ type: "user/setUser", payload: null },该操作对象被传递给dispatch函数,类似于dispatch({ type: "user/setUser", payload: "Drew" }),将被传递到Reducer树.

然后,setReducer Reducer函数处理这个"user/setUser"动作类型,并访问该动作对象的payload属性.

setUser: (state, action: PayloadAction<string | null>) => {
  state.user.email = action.payload; // "Drew" or null
}

结果是将state.user.email设置为存储中的有效负载值"Drew".

同样,您可以使用setLoading操作来分派布尔值.

dispatch(setLoading(true));
setLoading: (state, action: PayloadAction<boolean>) => {
  state.isLoading = action.payload; // true
},

Typescript相关问答推荐

Typescript抱怨T可以用约束MyType的不同子类型实例化'

类型可分配给类型的约束,但可以用不同的约束子类型实例化

我可以让Typescript根据已区分的联合键缩小对象值类型吗?

"@ clerker/nextjs/server没有名为clerkMiddleware的导入成员'

相同端点具有不同响应时的RTKQuery类型定义

如何正确修复TypScript 4.7到4.8升级中的TS 2345编译错误

当类型断言函数返回假时,TypScript正在推断从不类型

如果在TypeScript中一个原始的类方法是递归的,如何使用类decorator 模式?

在TypeScrip中分配回调时,参数的分配方向与回调本身相反.为什么会这样呢?

如何在TypeScrip中正确键入元素和事件目标?

是否可以基于对象的S属性值[]约束对象的其他属性值用于类型化的对象数组?

有没有可能产生输出T,它在视觉上省略了T中的一些键?

使用2个派生类作为WeakMap的键

如果数组使用Reaction-Hook-Form更改,则重新呈现表单

如何将TS泛型用于react-hook-form接口?

类型推断对React.ForwardRef()的引用参数无效

将布尔值附加到每个对象特性

如何解决&Quot;类型不可分配给TypeScrip IF语句中的类型&Quot;?

如何在Vuetify 3中导入TypeScript类型?

Angular另一个组件的nativeelement未定义