欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

antd form表單中如何嵌套自定義組件

 更新時間:2023年03月12日 14:35:23   作者:wuliCaibao  
這篇文章主要介紹了antd form表單中如何嵌套自定義組件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

前言

當某些自定義的組合類組件,也希望能進行表單元素的校驗,以及利用antd的form表單實例進行數據的修改或者數據獲取,這招便可以派上用場啦~

表單部分

<Form.Item label="周期" labelAlign="right">
    {getFieldDecorator('cycle', {
        rules: [{ required: true, validator: checkCycle }],
        initialValue: cycle,
    })(<CycleInput cycleOptions={cycleOptions} />)}
</Form.Item>

表單部分可以引入自定義的校驗邏輯,如上面的checkCycle :

可以像下面這樣,通過Promise.reject()返回錯誤校驗提示,通過Promise.resolve()正確通過校驗。

/** 校驗生命周期輸入內容 */
const checkCycle = useCallback((_, value) => {
     const format = value?.split(' ');
     if (!format) return Promise.reject(new Error('周期不可為空!'));

     /** always 永久保存選項 */
     if (format.length < 2 && format[0] === 'always') {
         return Promise.resolve();
     }
     if (format[1] === 'undefined') {
         return Promise.reject(new Error('請選擇周期!'));
     }
     const num = +format[0];
     if (num > 0 && format[1]) {
         return Promise.resolve();
     }
     return Promise.reject(new Error('請輸入大于 0 的數字!'));
 }, []);

有關校驗的內容,antd也是參考一個成熟的庫 async-validator,上面這種寫法可以參考文檔這塊 asyncValidator

如果懶得看文檔直接看圖:

asyncValidator的用法

大概意思就是說,可以通過兩種方式來實現一些異步校驗:

(1)可以通過調用callback,即asyncValidator的第三個參數,來完成校驗

(2)可以通過返回Promise,來完成校驗

自定義組件

注意value是該表單域的值,onChange是對應可以改變該表單域的值的方法

const CycleInput = ({ value, onChange, cycleOptions }) => {
    const format = value?.split?.(' ');
    const num = format?.[0];
    const type = format?.[1];

    const triggerChange = changedValue => {
        onChange && onChange(changedValue);
    };

    /** 根據后端接口返回的數據,type 有值,則為 day、week、month、year 其一 */
    /** type 若為 undefined,則 num 為 always */
    const [cycleOption, setCycleOption] = useState(type ?? num);
    const [cycleInputValue, setCycleInputValue] = useState(
        (typeof +num === 'number' && !_.isNaN(+num) && num) || '',
    );

    const onCycleChange = cycleOption => {
        setCycleOption(cycleOption);
        triggerChange(
            cycleOption === 'always'
                ? cycleOption
                : `${cycleInputValue} ${cycleOption}`,
        );
    };

    const onInputChange = e => {
        const newNumber = parseInt(e.target.value || '0', 10);
        if (_.isNaN(newNumber)) {
            return;
        }
        setCycleInputValue(newNumber);
        triggerChange(
            cycleOption === 'always' ? cycleOption : `${newNumber} ${cycleOption}`,
        );
    };

    return (
        <Input.Group>
            {cycleOption === 'always' ? (
                <Select
                    onChange={onCycleChange }
                    defaultValue={cycleOption}
                    style={{ width: 240 }}
                >
                    {cycleOptions.map(item => (
                        <Select.Option key={item.value} value={item.value}>
                            {item.label}
                        </Select.Option>
                    ))}
                </Select>
            ) : (
                <span>
                    <Input
                        value={cycleInputValue}
                        style={{ width: 156 }}
                        onChange={onInputChange}
                    />
                    <Select
                        onChange={onCycleChange}
                        defaultValue={cycleOption}
                        style={{ width: 84 }}
                    >
                        {cycleOptions.map(item => (
                            <Select.Option key={item.value} value={item.value}>
                                {item.label}
                            </Select.Option>
                        ))}
                    </Select>
                </span>
            )}
        </Input.Group>
    );
};

可以看出,自定義部分邏輯也比較簡單,通過value參數可以展示組件的值,通過onChange方法,可以改變表單域的值,實現了表單帶給我們的便捷功能。到此結束啦,快試試吧,實踐出真知呀!

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 徹底搞懂并解決vue-cli4中圖片顯示的問題實現

    徹底搞懂并解決vue-cli4中圖片顯示的問題實現

    這篇文章主要介紹了徹底搞懂并解決vue-cli4中圖片顯示的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • vue.js中導出Excel表格的案例分析

    vue.js中導出Excel表格的案例分析

    這篇文章主要介紹了vue.js中如何導出Excel表格,在項目中經常會遇到這樣的需求,今天小編分步驟通過實例代碼給大家詳細介紹,需要的朋友可以參考下
    2019-06-06
  • vue實現移動滑塊驗證

    vue實現移動滑塊驗證

    這篇文章主要為大家詳細介紹了vue實現移動滑塊驗證,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • vue-cli —— 如何局部修改Element樣式

    vue-cli —— 如何局部修改Element樣式

    這篇文章主要介紹了vue如何局部修改Element樣式,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下
    2020-10-10
  • vue使用luckyexcel實現在線表格及導出導入方式

    vue使用luckyexcel實現在線表格及導出導入方式

    這篇文章主要介紹了vue使用luckyexcel實現在線表格及導出導入方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Vue實現生成本地Json文件功能方式

    Vue實現生成本地Json文件功能方式

    這篇文章主要介紹了Vue實現生成本地Json文件功能方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • vue中filter的應用場景詳解

    vue中filter的應用場景詳解

    這篇文章主要為大家介紹了vue中filter的應用場景,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • 詳解基于iview-ui的導航欄路徑(面包屑)配置

    詳解基于iview-ui的導航欄路徑(面包屑)配置

    這篇文章主要介紹了詳解基于iview-ui的導航欄路徑(面包屑)配置,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-02-02
  • vue2+elementui的el-table固定列會遮住橫向滾動條及錯位問題解決方案

    vue2+elementui的el-table固定列會遮住橫向滾動條及錯位問題解決方案

    這篇文章主要介紹了vue2+elementui的el-table固定列會遮住橫向滾動條及錯位問題解決方案,主要解決固定列錯位后, 接下來就是把固定列往上提滾動條的高度就不會影響了,需要的朋友可以參考下
    2024-01-01
  • vue開發(fā)中關于axios的封裝過程

    vue開發(fā)中關于axios的封裝過程

    這篇文章主要介紹了vue開發(fā)中關于axios的封裝過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評論