有什么方法可以与formik重复使用MUI AutoComplete?

发布于 2025-01-24 13:28:56 字数 2172 浏览 4 评论 0原文

我有一个MUI自动完成组件。我正在尝试使用添加formik验证的表单重复使用此自动完成组件。 我的自动完成组件是,

const CustomAutoCompleteField = props => {
    const {rerenderAutocomplete, data, refetchCategoryData, autoCompleteFieldsData, inputLabel, autoCompleteFieldsInputOnChange , onTouch, onErrors,fieldProps, onBlur} = props
    const [textFieldData, setTextFieldData] = useState(null)
    const onChangeHandler = (event, value) =>{


    }
  
    return (
        <>
         
            <Autocomplete
                key={rerenderAutocomplete}
                // value={onEdit && data}
                isOptionEqualToValue={(option, value) => option.name === value.name}
                onBlur={onBlur}
                onChange={onChangeHandler}
                fullWidth
                id="tags-outlined"
                options={autoCompleteFieldsData ? autoCompleteFieldsData : top100Films }
                getOptionLabel={(option) => option.name}
                filterSelectedOptions
                renderInput={(params) => (<TextField
                    required
                    {...params}
                    label={inputLabel}
                    onChange={textFieldInputOnChange}
                    error={Boolean(onTouch && onErrors)}
                    helperText={onTouch && onErrors}
                    {...fieldProps}
                />)}
            />
        </>
    );
};

在这里,我将formik属性传递给了侧面道具,这些属性是OnTouch,OnErrors,fieldprops,onblur。

在我的父组件中,我通过提供道具来使用此自动完成字段,这是

  <CustomAutoCompleteField inputLabel='Select Category'
                                                     onBlur={addNewServiceFormik.handleBlur}
                                                     onTouch={addNewServiceFormik.touched.selectedCategoryName}
                                                     onErrors={addNewServiceFormik.errors.selectedCategoryName}
                                                     fieldProps={addNewServiceFormik.getFieldProps('selectedCategoryName')}
                            />

我不知道为什么,当我单击表单上的提交时,此自动完成量不会按照Formik验证显示任何助手文本。

I have a mui autocomplete component. I am trying to reuse this autocomplete component with a form where formik validation added.
My autocomplete component is,

const CustomAutoCompleteField = props => {
    const {rerenderAutocomplete, data, refetchCategoryData, autoCompleteFieldsData, inputLabel, autoCompleteFieldsInputOnChange , onTouch, onErrors,fieldProps, onBlur} = props
    const [textFieldData, setTextFieldData] = useState(null)
    const onChangeHandler = (event, value) =>{


    }
  
    return (
        <>
         
            <Autocomplete
                key={rerenderAutocomplete}
                // value={onEdit && data}
                isOptionEqualToValue={(option, value) => option.name === value.name}
                onBlur={onBlur}
                onChange={onChangeHandler}
                fullWidth
                id="tags-outlined"
                options={autoCompleteFieldsData ? autoCompleteFieldsData : top100Films }
                getOptionLabel={(option) => option.name}
                filterSelectedOptions
                renderInput={(params) => (<TextField
                    required
                    {...params}
                    label={inputLabel}
                    onChange={textFieldInputOnChange}
                    error={Boolean(onTouch && onErrors)}
                    helperText={onTouch && onErrors}
                    {...fieldProps}
                />)}
            />
        </>
    );
};

Here I am passing formik attributes in side props which are, onTouch, onErrors,fieldProps, onBlur.

In My Parent component, i am using this autocomplete field by giving props, which are,

  <CustomAutoCompleteField inputLabel='Select Category'
                                                     onBlur={addNewServiceFormik.handleBlur}
                                                     onTouch={addNewServiceFormik.touched.selectedCategoryName}
                                                     onErrors={addNewServiceFormik.errors.selectedCategoryName}
                                                     fieldProps={addNewServiceFormik.getFieldProps('selectedCategoryName')}
                            />

I don,t know why, when i click submit on my form, this autocomplete doesn't show any helper text as per formik validation.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

画骨成沙 2025-01-31 13:28:56

我只是简单地为此创建了一个组件

,您必须通过formikproviderform> formikcontext一起使用


import { TextField } from '@mui/material';
import Autocomplete from '@mui/material/Autocomplete';
import { useFormikContext } from 'formik';
import React from 'react';


type OptionsValues = {
  title: string,
  value: string
}

type Props = {
  id: string,
  name: string,
  label: string,
  options: OptionsValues[]
}

function MuiltSelect(props: Props) {
  const { options, name, label, id } = props

  const formik = useFormikContext();

  return (
    <Autocomplete
      {...props}
      multiple
      options={options}
      getOptionLabel={(option: any) => option.title}
      onChange={(_, value) => formik.setFieldValue(name, value)}
      filterSelectedOptions
      isOptionEqualToValue={(item: any, current: any) => item.value === current.value}
      renderInput={(params) => (
        <TextField
          {...params}
          id={id}
          name={name}
          label={label}
          variant={"outlined"}
          onChange={formik.handleChange}
          error={formik.touched[name] && Boolean(formik.errors[name])}
          helperText={formik.errors[name]}
          value={formik.values[name]}
          fullWidth
        />
      )
      }
    />
  )
}


export default MuiltSelect

检查GIST

https://gist.github.com/wellers0n/wellers0n/d5dffb1263ae0fed5046e46e45c47a7a7a7c4c4a7 c47c4c4a7

I simply created a component for this

In the form your must pass FormikProvider for use with FormikContext


import { TextField } from '@mui/material';
import Autocomplete from '@mui/material/Autocomplete';
import { useFormikContext } from 'formik';
import React from 'react';


type OptionsValues = {
  title: string,
  value: string
}

type Props = {
  id: string,
  name: string,
  label: string,
  options: OptionsValues[]
}

function MuiltSelect(props: Props) {
  const { options, name, label, id } = props

  const formik = useFormikContext();

  return (
    <Autocomplete
      {...props}
      multiple
      options={options}
      getOptionLabel={(option: any) => option.title}
      onChange={(_, value) => formik.setFieldValue(name, value)}
      filterSelectedOptions
      isOptionEqualToValue={(item: any, current: any) => item.value === current.value}
      renderInput={(params) => (
        <TextField
          {...params}
          id={id}
          name={name}
          label={label}
          variant={"outlined"}
          onChange={formik.handleChange}
          error={formik.touched[name] && Boolean(formik.errors[name])}
          helperText={formik.errors[name]}
          value={formik.values[name]}
          fullWidth
        />
      )
      }
    />
  )
}


export default MuiltSelect

check gist

https://gist.github.com/Wellers0n/d5dffb1263ae0fed5046e45c47a7c4a7

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文