vertically-challenged
@vertically-challenged

State обновляется, но рендеринга не происходит, как это исправить?

В функции addRecord я меняю данные на сервере и мне сразу же нужно получить и отобразить эти новые данные, но данные отрисовываются только после второго вызова данной функции, как это исправить? Почему так происходит?

import React, { useState, useEffect} from 'react'
import './App.scss'
import API from './API/api'
import Table from './modules/Table/Table'
import Button from './modules/common/Button/Button'
import mainConfig from './mainConfig'


const addRecord = (setRecords) => {
  const newRecord = {data:{}}
  for (let field of mainConfig.fields) {
    newRecord.data[field] = ''
  }
  API.addRecord(newRecord).then(() => {
    API.getData().then(records => {
      setRecords(records)
    })
  })
}

function App() {
  const [records, setRecords] = useState({})
  const [modifiedFields, setModifiedFields] = useState([])

  useEffect(() => {
    API.getData().then(records => {
      setRecords(records)
    })
  }, [])


  return (
    <div>
      {records !== undefined && <Table records={records} setRecords={setRecords} modifiedFields={modifiedFields} setModifiedFields={setModifiedFields}/>}
      <Button name={'Add record'} onClick={() => addRecord(setRecords)}/>
    </div>
  )
}

export default App
  • Вопрос задан
  • 381 просмотр
Решения вопроса 1
@deantek
ты вызываешь хук за пределами компонента App, конечно он не будет обновляться, хуки нельзя так использовать
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
API.addRecord(newRecord) работает асинхронно. Надо дождаться его завершения, и только потом делать запрос API.getData()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы