У меня есть массив с именами пользователей в функции useEffect, и я пытаюсь отобразить его в опции выбора, используя функцию карты.

let dropdown= React.createRef();

useEffect(() => {
    setstate({
      users: ['test user', 'lokesh'],
      username: 'test user'
    })
});

И у меня есть форма, в которой я хочу отобразить ее в раскрывающемся списке

<form onSubmit={onsubmit}>
    <div className="form-group">
      <label for="username">Username</label>
      <select ref={dropdown}
        required
        className="form-control"
        value={state.username}
        onChange={onChangeUsername}
      >
        {state.users.map(user => {
          return (
            <option
              key={user}
              value={user}>
              {user}
            </option>
          )
        })}
      </select>
</div>
<form>

Страница загружается, но выдает ошибку, когда я нажимаю другие входные тексты

0
Lokesh Bajracharya 9 Ноя 2019 в 09:33
Вы пытаетесь смешать компонент класса с функциональным компонентом. setState используется в компоненте класса, и вы пытаетесь использовать то же самое в функциональном компоненте. Для этого вам нужно использовать хук useState.
 – 
Akhil Aravind
9 Ноя 2019 в 09:45
Закрывающий тег формы отсутствует. Ошибка из-за этого?
 – 
Gangadhar Gandi
9 Ноя 2019 в 09:46
1
Аравинд, я так не думаю. Здесь он использует компонент класса. Возможно, он написал оператор useState, как показано ниже. const [состояние, setstate] = useState({ пользователи: [], имя пользователя: '' })
 – 
Gangadhar Gandi
9 Ноя 2019 в 09:49
Я использовал «состояние» в качестве имени своего хука, например const [state, setstate] = useState (...)
 – 
Lokesh Bajracharya
9 Ноя 2019 в 09:49
Компоненты класса не имеют хука useEffect, хуки предназначены только для функционального компонента.
 – 
Akhil Aravind
9 Ноя 2019 в 09:52

1 ответ

Я сделал здесь пример stackblitz, надеюсь, это решение, которое вам нужно. Извините, но я не знаю, как создать здесь скрипку. То, как вы используете здесь useEffect, неверно. И в функциональном компоненте это не createRef, это useRef для справки.

Проверьте stackblitz

useEffect(() => {
setstate({
  users: ['test user', 'lokesh'],
  username: 'test user'
})
},[]);
1
Akhil Aravind 9 Ноя 2019 в 10:07
Я добавил изменения, так что вы можете сразу увидеть изменение имени пользователя. надеюсь, это помогло.
 – 
Akhil Aravind
9 Ноя 2019 в 10:12
react-nyb4ng.stackblitz.io не могли бы вы проверить эту ошибку
 – 
Lokesh Bajracharya
9 Ноя 2019 в 10:20
Отмечая, пожалуйста, поделитесь ссылкой на редактор
 – 
Akhil Aravind
9 Ноя 2019 в 10:21
Привет, у меня проблема. Я не использовал функцию стрелки для установки значения в свойстве onChange. У меня было setState, например setState=({username: e.target.value}). но я не понимаю почему. могли бы вы объяснить
 – 
Lokesh Bajracharya
9 Ноя 2019 в 10:33