Почему useState не работает после извлечения данных - PullRequest
1 голос
/ 20 марта 2019

когда я console.log мой ответ от API, он там.Но затем, когда я пытаюсь установить состояние через хук usestate, он не обновляет состояние.

const [data, setData] = useState([])

  const getLocation = () => {
axios
  .get(
    `https://myrequest=${
      process.env.REACT_APP_GOOGLE
    }&address=${location}`
  )
  .then(response => {
    console.log(response) //response is present
    setData(response)
    console.log(data)// data didn't update,empty array
  })

};// getLocation вызывается кнопкой с onClick

1 Ответ

1 голос
/ 21 марта 2019

Ваш код работает, но data не будет обновляться синхронно при вызове setData, а data все еще является ссылкой на старый массив.

Попробуйте сделать data, и вы увидите, что он корректно обновляется.

Пример

const { useState } = React;

function getData() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve(['foo', 'bar'])
    }, 1000)
  })
}

function App() {
  const [data, setData] = useState([])

  function getLocation() {
    getData().then(response => {
      setData(response)
      console.log(data)
    })
  }

  return (
    <div>
      {data.map(item => (
        <div key={item}>{item}</div>
      ))}
      <button onClick={getLocation}>Load location</button>
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>

<div id="root"></div>
...