Данные ComboSelection MaterialUI ReactJs Api

Я новичок в реагировании и использую поле со списком материалов пользовательского интерфейса (компонентов) для отображения выбранных данных из API.

Это мой код:

this.state = { data: [] , dataValue: ''}

componentDidMount() {
    this.props.getAllData().then(data => this.setState({data})}

 render() {
     return (
         <FormControl variant = "filled">
         <InputLabel htmlFor = "filled-age-native-simple">DATA</InputLabel>
  <Select
   native
   value = {this.state.dataValue}
   onChange = {this.handleChangeEvent('dataValue')}
   input = {<FilledInput name = "dataValue" id = "filled-age-native-simple" />}>
   // Problem solved
  {this.state.data.map(dataV => {
      return (
            <option value = {dataV.id}> {dataV.name} </option>
          );
    })}

   </Select>
</FormControl>

Каждый раз, когда вы выбираете значение, состоянию присваивается идентификатор.

Реализуя это, я получаю эту ошибку:

Invalid prop children supplied to Select, expected a ReactNode.
in Select (created by Context.Consumer)

кто-нибудь знает, как решить эту проблему? Спасибо

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы инициализируете состояние - вы можете сделать это только с имеющимися значениями, так сказать. Вы не можете использовать значение на основе обещания, как вы пытаетесь сделать:

this.state = { data: this.props.getAllData(), dataValue: ''}

Во-вторых, при рендеринге компонентов вам также необходимо иметь все данные для рендеринга. В частности, вы не можете сделать это:

render() {
    return <el>{this.state.data.then(...

Если вам нужно обрабатывать асинхронные вызовы данных в вашем компоненте, вы должны использовать функцию componentDidMount (или конструктор), чтобы инициировать вызов.

Например:

componentDidMount() {
    this.props.getMyData().then(data => this.setState({data}) )
}

При вызове setState это вызовет повторную визуализацию вашего компонента и может использовать данные, которые вы только что сохранили в состоянии.

Я внес изменения, попытался установить значение параметров, подобное этому {this.state.data.map(dataV => {<option value{dataV.id}> {dataV.name} </option>})}, но параметр значения пустые, в чем может быть проблема? не отображает данные в опции?

Mihail 03.07.2019 12:51

опечатка наверное? значение = {dataV.id}

jsdeveloper 03.07.2019 12:54

Я пытался, даже объявляя <option value = {1}>Test</option> внутри карты, все равно было пусто.

Mihail 03.07.2019 12:57

хорошо, тогда, вероятно, ваш массив данных пуст - console.info(this.state.data) в вашей функции рендеринга для проверки

jsdeveloper 03.07.2019 12:59

Я сделал, он становится пустым, пустым, пустым, а затем пустым с данными, что странно.

Mihail 03.07.2019 13:04

это ожидаемо - ваш компонент будет отображаться несколько раз, прежде чем данные станут доступны. Тогда последний раз должен быть, когда ваши данные там.

jsdeveloper 03.07.2019 13:06

последний массив содержит данные. Это потому, что параметры принимают только первый пустой массив?

Mihail 03.07.2019 13:08

нет, компонент должен обновляться при каждом повторном рендеринге, но я не могу вам помочь, не видя ваш новый код - возможно, создайте новый вопрос с вашим новым кодом

jsdeveloper 03.07.2019 14:50

каково тогда точное содержимое this.state.data?

jsdeveloper 03.07.2019 18:13

Я исправил проблему, и я обновлю код с исправленной проблемой.

Mihail 03.07.2019 18:17

Хорошо, пожалуйста, отметьте как правильный, так как я исправил вашу первоначальную проблему.

jsdeveloper 04.07.2019 17:44

Другие вопросы по теме

Как вставить панель поиска для Material-UI MenuItem?
Ответить на вопрос новичка: запутанный пример функции стрелки
Состояние совместного использования элементов
Как изменить высоту всплывающего окна материала пользовательского интерфейса, которое открывается при выборе
Сделайте так, чтобы ящик пользовательского интерфейса материала оставался того же размера, а не изменялся при изменении размера содержимого
Переопределить .Mui-disabled (или другие псевдоклассы/состояния) из темы (MUI v4.1.X)
Действовать предупреждение при тестировании компонента с подсказкой пользовательского интерфейса материала
Настройте z-индекс реагирующего материала, выберите фон пользовательского интерфейса
Как вызвать метод дочернего компонента из события родительского компонента в Reactjs
Правильный способ нацеливания и стилизации определенных дочерних элементов в компонентах оболочки Material-ui?