【问题标题】:Setting value in multiple Autocomplete在多个自动完成中设置值
【发布时间】:2021-04-26 18:08:50
【问题描述】:

我使用带有 react-hook-form 的 React Material-UI,如果使用多个属性,我不能setValue

谁能帮帮我。

这是我的组件:

    <Controller
      name={name}
      control={control}
      render={({ field, fieldState: { error } }) => {
        // eslint-disable-next-line no-console
        // console.log(field);
        // console.log('field.value', field.value);
        return (
          <AutocompleteMaterial
            disableClearable={disableClearable}
            {...field}

            onBlur={() => {
              if ((!field.value || (Array.isArray(field.value) && field.value.length === 0)) && persistValue) {
                field.onChange(persistValue);
              }
            }}
            multiple={multiple}
            freeSolo={false}
            filterSelectedOptions={multiple}
            disabled={disabled}
            options={options}
            getOptionLabel={option => option.title}
            className="w100"
            onChange={(_e, data) => {
              // console.log('onChange', data);
              return field.onChange ? field.onChange(data) : () => {};
            }}
            renderInput={params => {
              return (
                <TextField
                  {...params}
                  className="style-ip"
                  variant="standard"
                  size={multiple ? 'small' : 'medium'}
                  helperText={error ? error.message : ''}
                  error={!!error}
                />
              );
            }}
          />
        );
      }}
    />

当我 setValue 没有多个 setValue('field', { title: 'title', value: 'value' }); 时。效果很好

当我setValue 有多个时。我一直在尝试设置数组或字段,但它的工作。

【问题讨论】:

    标签: reactjs autocomplete material-ui react-hook-form


    【解决方案1】:

    试试这个,因为多个值存储在一个数组中:

    setValue('field', [{ title: 'title', value: 'value' }]);
    

    编辑:您还需要使用controlled mode 才能更新Autocomplete 的值。为此,请在初始渲染时为 Autocompletevalue 属性提供一个非空值:

    const { control, setValue } = useForm({
      defaultValues: {
        name: []
      }
    });
    
    <Controller
      name="name"
      control={control}
      render={({ field, fieldState: { error } }) => {
      ...
    

    现场演示

    【讨论】:

    • 非常感谢。我发现原因是我从 api 获得的选项。没有多个,没关系。但是对于多个,我需要使用 useEffect 来处理选项更改和 setValue 来自动完成多个~~。我花了3天时间来解决这个问题~~。非常感谢,这个例子对我帮助很大。
    猜你喜欢
    • 2019-04-21
    • 1970-01-01
    • 2017-07-10
    • 2020-12-08
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-19
    • 2010-10-26
    相关资源
    最近更新 更多