【问题标题】:Autocomplete Set Default Value in React在 React 中自动完成设置默认值
【发布时间】:2020-12-08 16:21:42
【问题描述】:

我需要在我的 react 应用程序的自动完成中设置一个默认值。我的问题是当我尝试提交它时,它仍然无效。这意味着它没有任何价值。我需要单击自动完成并再次选择它以使其具有值。

请检查此代码框链接CLICK HERE

          <Autocomplete
            name="member_status"
            value={values.member_status}
            options={memberStatuses ? memberStatuses : []}
            getOptionLabel={(memberStatus) => memberStatus.name}
            onChange={(e, value) => {
              setFieldValue(
                "member_status",
                value !== null ? value.id : ""
              );
            }}
            renderInput={(params) => (
              <TextField
                {...params}
                label="Member Status"
                name="member_status"
                variant="outlined"
                onBlur={handleBlur}
                helperText={
                  touched.member_status ? errors.member_status : ""
                }
                error={
                  touched.member_status && Boolean(errors.member_status)
                }
              />
            )}
          />

【问题讨论】:

  • 为什么是yup.string()?不应该是object吗?
  • @bertdida。您可能想编辑我的代码框。谢谢
  • 签出this
  • @bertdida。谢谢,顺便问一下,您将name="member_status"values={values.member_status} 放在 AutoComplete 或 TextField 部分的什么位置。
  • name="member_status" 应该在 TextField 上,value 属性应该在 AutoComplete 上。

标签: javascript reactjs material-ui formik yup


【解决方案1】:

这里的问题是您将Autocomplete 的初始值设置为object,然后验证string

将您的 validationSchema 更改为

const validationSchema = yup.object().shape({
  member_status: yup
    .object()
    .shape({
      id: yup.number(),
      name: yup.string()
    })
    .nullable()
    .required("Select member status")
});

和你的AutocompleteonChange 处理程序

...
onChange={(e, value) => {
  setFieldValue("member_status", value); // set the new value to an object, not string
}}

应该可以。

【讨论】:

  • 谢谢。为什么.nullable() .required("Select member status")中有nullable()
  • 当用户点击我们表单上的x按钮时。
  • 但是后面有一个required
  • 我设置了nullable 以避免来自yup 的此消息 - member_status 必须是对象类型,但最终值为:null。如果“null”打算作为一个空值,请务必将架构标记为 .nullable()。当valuenull 时,它会回退到required 验证器。
  • 哦,是的。你怎么能消除这种错误?我也需要它。并且应该可以为空。谢谢
猜你喜欢
  • 2017-07-24
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 2022-12-23
  • 1970-01-01
  • 2019-10-06
  • 2021-12-15
  • 2015-09-20
相关资源
最近更新 更多