react antd如何防止一份數(shù)據多次提交
更新時間:2023年10月23日 11:06:42 作者:majinbo111
這篇文章主要介紹了react antd如何防止一份數(shù)據多次提交問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
如何防止一份數(shù)據多次提交呢?
方案
利用antd 的button loading 方式實現(xiàn),在點擊提交按鈕后,先讓按鈕 loading,等待接口返回結果了,再做相應的處理,最終把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ù)據一旦開始,直到本次請求結束之前,不能進行下一次點擊,否則給與相應的提示
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又重新調用,state是來不及更新的,但是會在下一次調用該方法的時候執(zhí)行。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
React+Typescript創(chuàng)建項目的實現(xiàn)步驟
通過React組件庫和TypeScript的強類型特性,開發(fā)者可以創(chuàng)建出具有優(yōu)秀用戶體驗和穩(wěn)定性的Web應用程序,本文主要介紹了React+Typescript創(chuàng)建項目的實現(xiàn)步驟,感興趣的可以了解一下2023-08-08React報錯之Parameter event implicitly has a
這篇文章主要為大家介紹了React報錯之Parameter event implicitly has an any type,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08React18的useEffect執(zhí)行兩次如何應對
這篇文章主要給大家介紹了關于React18的useEffect執(zhí)行兩次如何應對的相關資料,文中通過實例代碼介紹的非常詳細,對大家學習或者使用React具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07