鍍金池/ 問答/HTML/ antd中setFieldsValue設(shè)置當(dāng)前的form中正在輸入的input值

antd中setFieldsValue設(shè)置當(dāng)前的form中正在輸入的input值

this.props.form.setFieldsValue({
      note: `Hi, ${value === 'male' ? 'man' : 'lady'}!`,
    });

antd?中當(dāng)前form表單中input中值變化,通過setFieldsValue設(shè)置當(dāng)前變化的input中的值無效,設(shè)置value又報(bào)錯(cuò),我該如何控制當(dāng)前變化的輸入框的值。

回答
編輯回答
話寡

你是說初始化嗎,還是怎樣。
如果不是初始化,antd的form本身就模擬了雙向數(shù)據(jù)綁定,不需要額外的賦值。
如果是初始化,兩種方法,一種initialValue,一種你寫的這個(gè),你的寫法沒有問題,檢查一下,你是否具有note這個(gè)表單名吧,或者你的value是否有值,以及你是否可以實(shí)時(shí)觸發(fā)這段函數(shù)

this.props.form.setFieldsValue({
      note: `Hi, ${value === 'male' ? 'man' : 'lady'}!`,
    });
2017年2月5日 02:54
編輯回答
亮瞎她

做類似功能也發(fā)現(xiàn)了同樣的問題,input的onChange事件里面去設(shè)置當(dāng)前的這個(gè)input的值是不可以的。然后發(fā)現(xiàn)了大佬提供的解決方法,里面還闡述了下原理為什么setFieldsValue不可以。反正沒太看懂但是按著說的方法解決了就是了,地址:http://ju.outofmemory.cn/entr...
參照著用的解決方法就是用antd官方提供的options.normalize

// 這里實(shí)現(xiàn)的是數(shù)值大于60就自動(dòng)加"/"
function createField1({
    key,
    formItem,
    required,
    message,
    validator,
    normalize
  }) {
    const rules = [
      {
        required: required || false,
        message,
        validator
      }
    ];
    let initialValue = item[key] ? item[key] + "" : "";
    return getFieldDecorator(key, { normalize, rules, initialValue })(formItem);
  }

<FormItem label="血壓:" key="pressure">
      {createField1({
        key: "bloodPressure",
        formItem: (
          <Select
            mode="combobox"
            size="large"
            defaultActiveFirstOption={false}
            showArrow={false}
            filterOption={false}
          >
            {option}
          </Select>
        ),
        normalize: (e) => {
          if (!isNaN(e) && e > 60) {
            return e + "/";
          }
          return e;
        }
      })}
    </FormItem>
2018年3月24日 04:03
編輯回答
毀與悔

廢話不說,直接粘貼項(xiàng)目代碼
// form
clipboard.png

// setFieldsValue
clipboard.png

初始化用的initialValue。

2017年11月29日 03:12
編輯回答
陌離殤

請問你的問題解決了嗎,我目前也遇到這樣的問題

2018年7月30日 02:50