typescript React表单挂钩与材料UI选择输入不起作用

sdnqo3pr  于 2022-12-24  发布在  TypeScript
关注(0)|答案(2)|浏览(94)

如何选择下面的文本字段应加载:

实际加载方式:

使用Material UI + React窗体钩子创建的My Select组件不会加载默认值。(该组件应该以选定的值开始,该值在代码的以下部分提供一次)

const clientData = await api.client.getClient(id);
  reset({ ...clientData });

它发生在一个useEffect中,当页面加载并从url中获取id时,该useEffect应该运行一次。

export const ClientSourceSelect = ({
      control,
      clientSources,
      getValues,
      errors,
    }: ClientSourceSelectProps) => (
      <FormControl fullWidth>
        <Controller
          control={control}
          name="clientSourceId"
          render={({ field: { onChange, value } }) => (
            <>
              <TextField label={value}></TextField>
              <Select onChange={onChange} value={value}>
                {clientSources.map((clientSource) => (
                  <MenuItem key={clientSource.id} value={clientSource.id}>
                    {clientSource.name}
                  </MenuItem>
                ))}
              </Select>
            </>
          )}
        />
      </FormControl>
    );

我在Select上创建了TextField,以测试值是否真的加载了,以及值是否真的显示在Select上(一个uuid对应于clientSource.id),因此值本身存在,但Select开始为空。使用检查器,li元素具有正确的data-value属性及其对应的id。

6jjcrrmo

6jjcrrmo1#

根据文档,您可以在调用useForm()钩子时提供默认值。

const { control } = useForm({
  defaultValues: {
    clientSourceId: <your default id>
  }
});

您的工作代码可以在此沙箱中找到:https://codesandbox.io/s/young-sun-7ee953

xzlaal3s

xzlaal3s2#

你能给我看看你的onChange函数吗

相关问题