ant-design Form.Item normalize在Edge觸發兩次

在項目中有的字段要填多個值,一般會用「,」隔開給後端chrome

 

 

 測試要求輸入中文逗號是不要提示錯誤,直接替換爲英文的後端

normalize 組件獲取值後進行轉換,再放入 Form 中。不支持異步 (value, prevValue, prevValues) => any
<Form.Item
                label="來源SIP IP端口:"
                name="srcIp"
                normalize={(value, prevValue, prevValues) =>{
            console.log(value);
if(!value)return ; return value.replace(/,/g,','); }} rules={[ { required: true, validator: (rule, value) => { let ips = value ? value.split(',') : value,reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5]):([1-9]\d{1,4})$/; if (!value) { return Promise.reject('請輸入來源SIP IP端口!'); } else if (ips.some(ip => reg.test(ip) === false)) { return Promise.reject('格式不對!'); } else { return Promise.resolve(); } } } ]} > <Input placeholder="請輸入服務器、IP端口,多個服務器、IP用「,」(英文)隔開"/> </Form.Item>

 

chrome:僅觸發了一次服務器

 

 Edge:觸發了兩次異步

 

 在normalize中直接拼接一段字符串,再返回,Edge觸發了一次,replace也不是異步操做呀,最後搞不懂整了個折中的辦法,避免出現兩個逗號就好了測試

 return content.replace(/,|,,|,,/g,',');
相關文章
相關標籤/搜索