reactjs 我想删除受控组件的警告

vwkv1x7d  于 2023-01-12  发布在  React
关注(0)|答案(1)|浏览(160)

警告:组件正在将不受控制的输入更改为受控制。这可能是由于值从未定义更改为已定义的值所致,这种情况不应发生。请决定在组件的生存期内使用受控制的输入元素还是不受控制的输入元素。详细信息:https://reactjs.org/link/controlled-components
出现此警告

package.json

"next": "13.0.6",
"react": "18.2.0",
"react-hook-form": "^7.40.0",
export interface UserSearchQuery {
  ageGteq: number | null
  ageLteq: number | null
}
const { control, handleSubmit } = useForm<UserSearchQuery>({
  defaultValues: {
    ageGteq: null,
    ageLteq: null,
  },
})

将defaultVlues设置为0可以解决这个问题,但我不想设置它。

nhn9ugyo

nhn9ugyo1#

我不知道该怎么改正。你有什么好的建议吗?
其组成如下。

// src/components/elements/TextField/control.tsx

import { FieldValues, useController, UseControllerProps } from 'react-hook-form'
import TextField from 'components/elements/TextField/index'

interface TextFieldProps {
  name: string
}

export type TextFieldControlProps<T extends FieldValues> = TextFieldProps & UseControllerProps<T>

const TextFieldControl = <T extends FieldValues>({
  name,
  control,
}: TextFieldControlProps<T>) => {
  const { field } = useController<T>({
    name,
    control,
  })

  return (
    <TextField
      name={name}
      value={field.value}
      onChange={field.onChange}
    />
  )
}

export default TextFieldControl
// src/components/elements/TextField/index.tsx

interface TextFieldProps {
  name: string
  value: string
  onChange: (value) => void
}

const TextField: React.FC<TextFieldProps> = ({
  value,
  onChange,
}) => {
  return (
    <input
      type="number"
      value={value}
      onChange={(e) => onChange(e.target.value)}
    />
  )
}

export default TextField
// src/pages/index.tsx

const { control, handleSubmit } = useForm<UserSearchQuery>({
  defaultValues: {
    ageGteq: null,
    ageLteq: null,
  },
})

<TextFieldControl id="age" name="ageGteq" control={control} />

相关问题