react antd如何防止一份數(shù)據(jù)多次提交
如何防止一份數(shù)據(jù)多次提交呢?
方案
利用antd 的button loading 方式實現(xiàn),在點擊提交按鈕后,先讓按鈕 loading,等待接口返回結(jié)果了,再做相應的處理,最終把loading 去除。
(當然 disabed 也可實現(xiàn)同樣的效果,個人建議是使用loading,交互會好一些)
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防重復點擊方法、原理
原理
在請求數(shù)據(jù)一旦開始,直到本次請求結(jié)束之前,不能進行下一次點擊,否則給與相應的提示
state中的初始設置:
state={
bool:true,
}
點擊事件設置:
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í)行請求,如果發(fā)生多次點擊的情況,方法開頭設置的bool:false就會生效,防止在請求還沒有完成的情況下進行下一次請求;
- 然后在請求完成之后,我們把Bool的狀態(tài)變更多來,以便此次請求完成還可以進行下一次請求。
- 至于方法開頭設置為false,請求還執(zhí)行,是源于一個異步機制,在同一個方法中設置state又重新調(diào)用,state是來不及更新的,但是會在下一次調(diào)用該方法的時候執(zhí)行。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解React??App.js?文件的結(jié)構(gòu)和作用
在React應用中,App.js文件通常是項目的根組件文件,它負責組織和渲染其他組件,是應用的核心部分,本文將詳細介紹App.js文件的結(jié)構(gòu)、作用和最佳實踐,感興趣的朋友跟隨小編一起看看吧2024-08-08
React+Typescript創(chuàng)建項目的實現(xiàn)步驟
通過React組件庫和TypeScript的強類型特性,開發(fā)者可以創(chuàng)建出具有優(yōu)秀用戶體驗和穩(wěn)定性的Web應用程序,本文主要介紹了React+Typescript創(chuàng)建項目的實現(xiàn)步驟,感興趣的可以了解一下2023-08-08
React報錯之Parameter event implicitly has a
這篇文章主要為大家介紹了React報錯之Parameter event implicitly has an any type,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
React18的useEffect執(zhí)行兩次如何應對
這篇文章主要給大家介紹了關(guān)于React18的useEffect執(zhí)行兩次如何應對的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用React具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07

