Когда я добавляю новый элемент в таблицу в 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
Обновлено: я не отправлял данные в правильном формате.
Не могли бы вы показать код компонента таблицы?
@Bergi, как я получу ответ на операцию? Мне нужно получить идентификатор нового добавленного пользователя.
@tania const response = await postDataToApi(); ...
@JonasWilms Я обновил вопрос, добавив некоторую информацию о таблице.
@JonasWilms Спасибо, я удалил then.
Я не понимаю вашего вопроса. Вы говорите «props.children таблицы пусты», но в вашем примере у Table нет дочерних элементов. У него есть только опора data. Мы, вероятно, сможем помочь вам больше, если вы предоставите минимально работоспособный тестовый пример. (например, на stackblitz.com)
Я имею в виду, что текстовые узлы td в этой строке пусты. Когда я использую React DevTools для проверки строки, эти данные должны находиться в props.children, который, как я полагаю, является частью react-table и / или пользовательского интерфейса Semantic React.
@RomGrk Я сделал очень упрощенный вариант: stackblitz.com/edit/react-m1rgmb
почему DataTable является компонентом с сохранением состояния? Почему бы не простому компоненту без сохранения состояния с двумя пропсами data и meta? Вы можете показать нам код этого компонента?
@TaniaRascia показывает ли этот минимальный тестовый пример проблему? Вот что я вижу: ibb.co/hDvOQK и ibb.co/hohRee В противном случае, что вы ожидаете увидеть в props.children узла td?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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