7
const roles = [
  { value: "STAFF", label: "Staff" },
  { value: "ADMIN", label: "Administrator" },
  { value: "MANAG", label: "Manager" },
  { value: "SUPER", label: "Supervisor" },
  { value: "OTHER", label: "Other" }
]

<Controller as={<TextField />} className={classes.textField} select label="Select Role" 
name="role" variant="outlined" required control={control} fullWidth inputRef={register({ 
required: true })}>
  {roles.map(role => (
    <MenuItem key={role.value} value={role.value}>
      {role.label}
    </MenuItem>
  ))}
  name="role"
</Controller>

I get the value of the dropdown {node: input, value: "MANAG", focus: ƒ} ERROR: Field is missing name attribute: MISSING THE NAME ATTRIBUTE OF "role" How do I assign the name of role attribute?

2 Answers 2

4

Take a look at the doc: https://react-hook-form.com/api#Controller

Controller takes care of the registration process, so you don't need to register at input level again.

<Controller
  control={control} 
  name="test" 
  render={({ onChange, onBlur, value }) => (
    <Checkbox
      onBlur={onBlur}
      onChange={e => onChange(e.target.checked)}
      checked={value}
    />
  )}
/>
<Controller render={props => <Input {...props} />} />
Sign up to request clarification or add additional context in comments.

Comments

2

You can try setting inputRef={ref}.

Controller's render provides a ref attribute.

<Controller
  name={'gender'}
  control={control}
  render={({ onChange, value, ref }) => {
    return (
      <Select
        inputRef={ref}
        label="Gender"
        defaultValue=""
        value={value}
        onChange={(event) => onChange(event.target.value)}
      >
        <MenuItem value="" />
        <MenuItem value="male">Male</MenuItem>
        <MenuItem value="female">Female</MenuItem>
        <MenuItem value="other">Other</MenuItem>
      </Select>
    );
  }}
/>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.