我的应用程序需要在启动时获取设置.它不需要任何参数,因为它获取所有内容.在添加之前没有问题

rejectWithValue

以便可以向用户显示实际状态或错误.然而,它需要两个参数,所以我这样做:

export const fetchClientSettings = createAsyncThunk(
  'app-settings/fetch-client-settings', 
  async (_notUsed = undefined, { rejectWithValue }) => {
    try {
      const response = await fetch(API_URL);
      if (!response.ok) {
        return rejectWithValue(new Error(response.statusText));
      }
      return await response.json();
    } catch (error) {
      return rejectWithValue(error);
    }
  }
);

我想知道这是如何正确地完成的.出于某种原因,documentation没有提到这个案子.如何处理超过1个参数.

推荐答案

出于某种原因,文档没有提到这个 case .只知道如何 若要处理多个参数,请执行以下操作.

这是因为这与其说是Redux&;Redux-Toolkit的"事情",不如说是一件Java脚本的"事情".有相当多的假设认为开发人员熟悉这种语言.

Redux-工具包创建的动作102采用up to单个参数,例如动作有效载荷.在这方面,createAsyncThunk个行动没有什么不同.向有效负载创建者传递两个参数,一个是作为操作有效负载的值,另一个是允许对存储实例和各种实用程序进行异步操作访问的thunkApi.

如果您没有传递任何参数,并且不需要访问第二个arg中的thunkAPI,则代码可能如下所示:

export const myAsyncAction = createAsyncThunk(
  'async/myAsyncAction', 
  async () => {
    ...
    return /* something */;
  }
);
dispatch(myAsyncAction());

在Java脚本中,如果一个函数有多个参数,而这些参数不一定都需要有定义值,那么它们103仍然会在函数声明中声明.任何有效的Javascript identifier都可以在这里使用,但常见的做法是对这些未使用的函数参数/参数使用下划线"_"字符.如果有多个未使用的参数,也可以将其与更具描述性的名称一起使用,例如"_unused_arg_1".换句话说,任何对你或你的团队有效的东西都是好的.如果您没有为有效负载传递一个值,那么您仍然需要声明一个标识符,以便您可以"跳过"它以转到您do需要访问的第二个参数.

export const myAsyncAction = createAsyncThunk(
  'async/myAsyncAction', 
  async (_, thunkApi) => {
    try {
      // ... happy path logic
      return data;
    } catch (error) {
      // ... sad path logic
      return thunkApi.rejectWithValue(error);
    }
  }
);
dispatch(myAsyncAction());

仅供参考,如果您需要将more than 1参数传递给createAsyncThunk操作,您可以将其打包到单个对象中作为有效负载的第一个参数.

示例:

export const myAsyncAction = createAsyncThunk(
  'async/myAsyncAction', 
  async (arg, thunkApi) => {
    const { foo, bar } = arg;
    try {
      // ... happy path logic
      return data;
    } catch (error) {
      // ... sad path logic
      return thunkApi.rejectWithValue(error);
    }
  }
);
dispatch(myAsyncAction({ foo: "foo", bar: "bar" }));

Javascript相关问答推荐

用相器进行向内碰撞检测

按钮未放置在html dis位置

Cookie中未保存会话数据

D3 Scale在v6中工作,但在v7中不工作

成功完成Reducers后不更新状态

如何在 cypress 中使用静态嵌套循环

Javascript json定制

如何避免页面第一次加载时由于CSS样式通过JavaScript更改而出现闪烁

将基元传递给THEN处理程序

无法重定向到Next.js中的动态URL

为什么NULL不能在构造函数的.Prototype中工作

如何在每隔2分钟刷新OKTA令牌后停止页面刷新

Plotly.js栏为x轴栏添加辅助文本

输入数据覆盖JSON文件

Firefox的绝对定位没有达到预期效果

如果查询为空,则MongoDB将所有文档与$in匹配

使用VITE开发服务器处理错误

当一条路由在Reaction路由中命中时,如何有条件地渲染两个组件或更改两个插座?

调试jQuery代码以获取所有行的总和(票证类型)

如何在预览中显示html+css与数据URL?