react antd如何防止一份數(shù)據(jù)多次提交
如何防止一份數(shù)據(jù)多次提交呢?
方案
利用antd 的button loading 方式實(shí)現(xiàn),在點(diǎn)擊提交按鈕后,先讓按鈕 loading,等待接口返回結(jié)果了,再做相應(yīng)的處理,最終把loading 去除。
(當(dāng)然 disabed 也可實(shí)現(xiàn)同樣的效果,個(gè)人建議是使用loading,交互會(huì)好一些)
import { Form, Input, Button, Select } from 'antd';
const { Option } = Select;
const layout = {
labelCol: {
span: 8,
},
wrapperCol: {
span: 16,
},
};
const tailLayout = {
wrapperCol: {
offset: 8,
span: 16,
},
};
class Demo extends React.Component {
formRef = React.createRef();
// create a flag
state = {
submitLoading = false;
};
onGenderChange = value => {
this.formRef.current.setFieldsValue({
note: `Hi, ${value === 'male' ? 'man' : 'lady'}!`,
});
};
onFinish = values => {
// set the flag is true
this.setState({submitLoading: true}, () => {
console.log(values);
//after request api, set the flag is false
this.setState({submitLoading: false});
})
};
onReset = () => {
this.formRef.current.resetFields();
};
onFill = () => {
this.formRef.current.setFieldsValue({
note: 'Hello world!',
gender: 'male',
});
};
render() {
let { submitLoading } = this.state;
return (
<Form {...layout} ref={this.formRef} name="control-ref" onFinish={this.onFinish}>
<Form.Item
name="note"
label="Note"
rules={[
{
required: true,
},
]}
>
<Input />
</Form.Item>
<Form.Item
name="gender"
label="Gender"
rules={[
{
required: true,
},
]}
>
<Select
placeholder="Select a option and change input text above"
onChange={this.onGenderChange}
allowClear
>
<Option value="male">male</Option>
<Option value="female">female</Option>
<Option value="other">other</Option>
</Select>
</Form.Item>
<Form.Item
noStyle
shouldUpdate={(prevValues, currentValues) => prevValues.gender !== currentValues.gender}
>
{({ getFieldValue }) =>
getFieldValue('gender') === 'other' ? (
<Form.Item
name="customizeGender"
label="Customize Gender"
rules={[
{
required: true,
},
]}
>
<Input />
</Form.Item>
) : null
}
</Form.Item>
<Form.Item {...tailLayout}>
<Button type="primary" htmlType="submit" loading={submitLoading}>
Submit
</Button>
<Button htmlType="button" onClick={this.onReset} loading={submitLoading}>
Reset
</Button>
<Button type="link" htmlType="button" onClick={this.onFill} loading={submitLoading}>
Fill form
</Button>
</Form.Item>
</Form>
);
}
}
ReactDOM.render(<Demo />, mountNode);
react防重復(fù)點(diǎn)擊方法、原理
原理
在請(qǐng)求數(shù)據(jù)一旦開(kāi)始,直到本次請(qǐng)求結(jié)束之前,不能進(jìn)行下一次點(diǎn)擊,否則給與相應(yīng)的提示
state中的初始設(shè)置:
state={
bool:true,
}
點(diǎn)擊事件設(shè)置:
btn_click = async () => {
this.setState({
bool: false,
})
.
.
.
if(this.state.bool){
const value = await fetch.bbb({})
if (value.code == 1) {
} else {
}
this.setState({
bool: true,
})
}
}
解析
- 滿足bool為true的情況,我們執(zhí)行請(qǐng)求,如果發(fā)生多次點(diǎn)擊的情況,方法開(kāi)頭設(shè)置的bool:false就會(huì)生效,防止在請(qǐng)求還沒(méi)有完成的情況下進(jìn)行下一次請(qǐng)求;
- 然后在請(qǐng)求完成之后,我們把Bool的狀態(tài)變更多來(lái),以便此次請(qǐng)求完成還可以進(jìn)行下一次請(qǐng)求。
- 至于方法開(kāi)頭設(shè)置為false,請(qǐng)求還執(zhí)行,是源于一個(gè)異步機(jī)制,在同一個(gè)方法中設(shè)置state又重新調(diào)用,state是來(lái)不及更新的,但是會(huì)在下一次調(diào)用該方法的時(shí)候執(zhí)行。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解React??App.js?文件的結(jié)構(gòu)和作用
在React應(yīng)用中,App.js文件通常是項(xiàng)目的根組件文件,它負(fù)責(zé)組織和渲染其他組件,是應(yīng)用的核心部分,本文將詳細(xì)介紹App.js文件的結(jié)構(gòu)、作用和最佳實(shí)踐,感興趣的朋友跟隨小編一起看看吧2024-08-08
React+Typescript創(chuàng)建項(xiàng)目的實(shí)現(xiàn)步驟
通過(guò)React組件庫(kù)和TypeScript的強(qiáng)類型特性,開(kāi)發(fā)者可以創(chuàng)建出具有優(yōu)秀用戶體驗(yàn)和穩(wěn)定性的Web應(yīng)用程序,本文主要介紹了React+Typescript創(chuàng)建項(xiàng)目的實(shí)現(xiàn)步驟,感興趣的可以了解一下2023-08-08
React項(xiàng)目中應(yīng)用TypeScript的實(shí)現(xiàn)
TypeScript通常都會(huì)依賴于框架,例如和vue、react 這些框架結(jié)合,本文就主要介紹了React項(xiàng)目中應(yīng)用TypeScript的實(shí)現(xiàn),分享給大家,具體如下:2021-09-09
react echarts刷新不顯示問(wèn)題的解決方法
最近在寫項(xiàng)目的時(shí)候遇到了一個(gè)問(wèn)題,當(dāng)編輯完代碼后echarts圖正常展示 , 可再次刷新頁(yè)面 , echarts會(huì)消失,所以本文給大家介紹了react echarts刷新不顯示問(wèn)題原因和解決方法,需要的朋友可以參考下2024-02-02
React報(bào)錯(cuò)之Parameter event implicitly has a
這篇文章主要為大家介紹了React報(bào)錯(cuò)之Parameter event implicitly has an any type,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)
這篇文章主要給大家介紹了關(guān)于React18的useEffect執(zhí)行兩次如何應(yīng)對(duì)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用React具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07

