如何从同一组件分派多个动作?

Pooja Kushwah

我想做的是,分派2个动作fetchBrand()fetchDistance()我有两个不同的reducer和不同的动作创建者,他们正在调用不同的API。

但是这里的问题是,根据中的顺序,它只能给出一个动作的结果useEffect()它在控制台中显示了两次,但是结果来自相同的API。

如果更改顺序,则它将两次为其他API控制台结果。这意味着我的API调用都成功了,但是一次只调用了1个API。

可能有一些功能,但我不知道。我该如何解决?

import { Form, Input, Button, Select } from 'antd'
import React from 'react'
import { useSelector, useDispatch } from 'react-redux'

import { fetchDistance } from '../redux/distanceAction'
import { fetchBrand } from '../redux/brandAction'

const { Option } = Select
const layout = {
  labelCol: {
    span: 8,
  },
  wrapperCol: {
    span: 10,
  },
}

const tailLayout = {
  wrapperCol: {
    offset: 10,
    span: 10,
  },
}

const UserForm = (props) => {
  const distanceList = useSelector((state) => state.distance)
  const brandList = useSelector((state) => state.brand)

  const dispatchDistance = useDispatch()
  const dispatchBrand = useDispatch()

  React.useEffect(() => {
    dispatchBrand(fetchBrand()) //dispatching action one
    dispatchDistance(fetchDistance()) //dispatching action 2
  }, [])

  const [form] = Form.useForm()

  const onFinish = (values) => {
    console.log(values)
    props.onSubmitForm(values)
    form.resetFields()
    console.log(brandList.brand)
    console.log(distanceList.distance)
    // dispatch(fetchBrand);
    // dispatch(fetchDistance);
  }

  return (
    <div className="form-layout">
      <h1> hello{distanceList.distance + brandList.brand}</h1>

      <Form {...layout} form={form} name="user-form" onFinish={onFinish}>
        <Form.Item name="name" label="Hotel Name" rules={[{ required: true }]}>
          <Input />
        </Form.Item>

        <Form.Item
          name="location"
          label="Hotel Location"
          rules={[{ required: true }]}
        >
          <Input />
        </Form.Item>

        <Form.Item name="distance" label="Distance" rules={[{ required: true }]}>
          <Select placeholder="Please select Distance" allowClear>
            <Option value="0km">0Km</Option>
            <Option value="10km">10Km</Option>
            <Option value="30">30km</Option>
          </Select>
        </Form.Item>

        <Form.Item name="brand" label="Brands" rules={[{ required: true }]}>
          <Select placeholder="Please select Brand" allowClear>
            <Option value="flip">Flipkart</Option>
            <Option value="amazon">Amazon</Option>
            <Option value="paytm">Paytm</Option>
          </Select>
        </Form.Item>

        <Form.Item {...tailLayout}>
          <Button type="primary" htmlType="submit">
            Submit
          </Button>
        </Form.Item>
      </Form>
    </div>
  )
}

export default UserForm
标记物

我的第一个观察结果是,您不需要调用useDispatch()两次,也不需要具有单独的dispatch命名变量。dispatch整个应用程序只有一个功能,因为整个应用程序只有一个Redux存储。因此,您只需要const dispatch = useDispatch()

其次,实际逻辑看起来不错,无论有没有固定名称,它可以正常工作dispatch因此,我不清楚这里的实际问题是什么,我建议仔细检查这些获取函数的实现。

更新

嗯,我想我看到了问题。

无论fetchBrandfetchDistance被派遣相同的API调用成功后,动作类型:dispatch(fetchsuccess(someData))两个减速器都在监听相同的动作类型。因此,两个reducer都将最终保存返回的第一个数据类型,然后用返回的第二个数据类型覆盖它

您需要具有“获取的品牌成功”和“获取的距离成功”不同的操作类型。

这里要注意的另一件事是,您正在编写的Redux代码的样式已经过时,并且将需要手工编写比您应该编写的代码更多的代码。我们的官方Redux Toolkit软件包将简化您获得的所有代码。例如,对于createAsyncThunk要获取的每种数据类型,将为成功/失败生成那些独特的操作类型。

请阅读我们文档中Redux基础知识:带Redux Toolkit的现代Redux教程页面,以了解如何正确使用Redux Toolkit。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何避免创建同一组件的多个实例

来自分类Dev

如何在Spring Framework中为同一组件提供多个名称?

来自分类Dev

React-当同一组件有多个实例时,如何更改单个组件的状态?

来自分类Dev

在同一组件中从组件调用方法

来自分类Dev

同一组件(图像占位符)上的多个图像

来自分类Dev

到达路由器中同一组件的多个路径名

来自分类Dev

聚合物:基于属性,同一组件的多个模板?

来自分类Dev

在 vuejs 中的同一组件中的多个元素上显示

来自分类Dev

同一组件和视图中的角度材质多个分页器

来自分类Dev

如何在同一组件中多次使用自定义组件

来自分类Dev

如何使用ReactJS在同一组件内调用组件的属性?

来自分类Dev

Angular 2如何为同一组件的子代提供不同的依赖关系

来自分类Dev

如何在同一组件中注入不同的服务令牌?

来自分类Dev

如何在 Ember 中的同一组件上编辑待办事项任务

来自分类Dev

如何在同一组件中使用 react-redux 控制加载标志?

来自分类Dev

如何以角度在同一组件上路由?

来自分类Dev

Vue:如何:将不同的处理程序传递给同一组件的 @click 事件?

来自分类Dev

如何将参数传递给同一组件中的函数?

来自分类Dev

angularjs应用程序设计同一组件(指令或指令+控制器)的多个实例

来自分类Dev

如何使用类型安全性在同一组件上实现OnInit和OnChanges

来自分类Dev

如何使用react和typescript在同一组件文件中使用上下文?

来自分类Dev

如何分派多个动作

来自分类Dev

灰烬:将动作从一个组件发送到另一组件

来自分类Dev

灰烬:将动作从一个组件发送到另一组件

来自分类Dev

如何使用不同的输入多次调用同一组件并将其显示在同一页面中

来自分类Dev

QML属性绑定取决于同一组件中的其他绑定

来自分类Dev

按下按钮即可向同一组件加载不同的数据

来自分类Dev

在同一组件中进行混合单元测试和集成测试

来自分类Dev

提琴手扩展和检查器在同一组件中

Related 相关文章

  1. 1

    如何避免创建同一组件的多个实例

  2. 2

    如何在Spring Framework中为同一组件提供多个名称?

  3. 3

    React-当同一组件有多个实例时,如何更改单个组件的状态?

  4. 4

    在同一组件中从组件调用方法

  5. 5

    同一组件(图像占位符)上的多个图像

  6. 6

    到达路由器中同一组件的多个路径名

  7. 7

    聚合物:基于属性,同一组件的多个模板?

  8. 8

    在 vuejs 中的同一组件中的多个元素上显示

  9. 9

    同一组件和视图中的角度材质多个分页器

  10. 10

    如何在同一组件中多次使用自定义组件

  11. 11

    如何使用ReactJS在同一组件内调用组件的属性?

  12. 12

    Angular 2如何为同一组件的子代提供不同的依赖关系

  13. 13

    如何在同一组件中注入不同的服务令牌?

  14. 14

    如何在 Ember 中的同一组件上编辑待办事项任务

  15. 15

    如何在同一组件中使用 react-redux 控制加载标志?

  16. 16

    如何以角度在同一组件上路由?

  17. 17

    Vue:如何:将不同的处理程序传递给同一组件的 @click 事件?

  18. 18

    如何将参数传递给同一组件中的函数?

  19. 19

    angularjs应用程序设计同一组件(指令或指令+控制器)的多个实例

  20. 20

    如何使用类型安全性在同一组件上实现OnInit和OnChanges

  21. 21

    如何使用react和typescript在同一组件文件中使用上下文?

  22. 22

    如何分派多个动作

  23. 23

    灰烬:将动作从一个组件发送到另一组件

  24. 24

    灰烬:将动作从一个组件发送到另一组件

  25. 25

    如何使用不同的输入多次调用同一组件并将其显示在同一页面中

  26. 26

    QML属性绑定取决于同一组件中的其他绑定

  27. 27

    按下按钮即可向同一组件加载不同的数据

  28. 28

    在同一组件中进行混合单元测试和集成测试

  29. 29

    提琴手扩展和检查器在同一组件中

热门标签

归档