Таблица реакции добавляет пустую строку при добавлении нового элемента в состояние

Когда я добавляю новый элемент в таблицу в React, я обновляю состояние, но таблица не перерисовывается с новыми данными. Я знаю, что данные передаются, потому что новый элемент появляется в состоянии и добавляется новая строка, но все props.children таблицы пусты.

Вот упрощенная версия родительского компонента.

class Page extends Component {
  initialState = {
    users: [],
  }

  state = this.initialState

  async componentDidMount() {
    const users = await getDataFromApi()

    this.setState({ users })
  }

  addRow = user => {
    this.setState({ users: [...this.state.users, user] })
  }

  render() {
    return (
      <div>
        <AddModal addRow = {this.addRow} />
        <Table data = {this.state.users} />
      </div>
    )
  }
}

Модальное окно добавления пользователя отправляет в API (успешно) и

handleSubmit = async event => {
  event.preventDefault()

  const response = await postDataToApi()
  const user = await getNewUser(response)

  addRow(user)
}

Таким образом, API обновляется успешно, новый пользователь успешно прочитан, данные успешно добавляются в состояние, а новая добавляемая строка имеет правильный идентификатор, но дочерние элементы таблицы пусты, поэтому внешний интерфейс просто показывает пустую строку.

Компонент таблицы - я использовал как настраиваемую оболочку таблицы над семантическим пользовательским интерфейсом, так и react-table, и проблема в любом случае сохраняется.

class Table extends Component {
  render() {
    const { data } = this.props

    return (
      <DataTable
        data = {data}
        meta = {column keys and values}
      />
    )
  }
}

class DataTable extends PureComponent {
  state = {}

  componentWillReceiveProps(nextProps) {
    this.setState({ data: nextProps.data, meta: nextProps.meta })
  }
  ...etc

Обновлено: я не отправлял данные в правильном формате.

Не используйте одновременно await и then

Bergi 06.09.2018 17:26

Не могли бы вы показать код компонента таблицы?

Jonas Wilms 06.09.2018 17:27

@Bergi, как я получу ответ на операцию? Мне нужно получить идентификатор нового добавленного пользователя.

Tania Rascia 06.09.2018 17:27

@tania const response = await postDataToApi(); ...

Jonas Wilms 06.09.2018 17:28

@JonasWilms Я обновил вопрос, добавив некоторую информацию о таблице.

Tania Rascia 06.09.2018 17:32

@JonasWilms Спасибо, я удалил then.

Tania Rascia 06.09.2018 17:38

Я не понимаю вашего вопроса. Вы говорите «props.children таблицы пусты», но в вашем примере у Table нет дочерних элементов. У него есть только опора data. Мы, вероятно, сможем помочь вам больше, если вы предоставите минимально работоспособный тестовый пример. (например, на stackblitz.com)

Rom Grk 06.09.2018 17:43

Я имею в виду, что текстовые узлы td в этой строке пусты. Когда я использую React DevTools для проверки строки, эти данные должны находиться в props.children, который, как я полагаю, является частью react-table и / или пользовательского интерфейса Semantic React.

Tania Rascia 06.09.2018 17:46

@RomGrk Я сделал очень упрощенный вариант: stackblitz.com/edit/react-m1rgmb

Tania Rascia 06.09.2018 18:37

почему DataTable является компонентом с сохранением состояния? Почему бы не простому компоненту без сохранения состояния с двумя пропсами data и meta? Вы можете показать нам код этого компонента?

Olivier Boissé 06.09.2018 18:55

@TaniaRascia показывает ли этот минимальный тестовый пример проблему? Вот что я вижу: ibb.co/hDvOQK и ibb.co/hohRee В противном случае, что вы ожидаете увидеть в props.children узла td?

Rom Grk 06.09.2018 20:16
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
11
1 024
0

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