【发布时间】:2021-03-01 18:01:42
【问题描述】:
我想要做的是,调度 2 个动作 fetchBrand() 和 fetchDistance()。我有两个不同的减速器和不同的动作创建者,它们调用不同的 API。
但这里的问题是,它只给出一个动作的结果,具体取决于useEffect() 中的序列。它在 console 中显示两次,但结果来自同一个 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
【问题讨论】:
标签: reactjs redux react-redux redux-thunk