React useState отображает начальное значение даже при обновлении состояния - PullRequest
0 голосов
/ 05 июля 2019

У меня проблемы с использованием состояния обновления useState при отправке.

Это простое погодное приложение для изучения React Hooks. Я прочитал в блоге Дэна Абрамова несколько раз о том, как использовать useEffect. Я пытался найти что-то похожее на мою проблему на Stackoverflow, но он не щелкает.

   const [search, setSearch] = useState('')
   // Query term
   const [query, setQuery] = useState('indianapolis')
   // API search results
   const [data, setData] = useState([])


   useEffect(() => {
    let didCancel = false

    const getWeather = async () => {
      try {
        const response = await fetch(`${baseUrl}? 
        q=${query}&APPID=${apiKey}`)
        const data = await response.json()

        if (!didCancel) {
          setData(data)
        }
      } catch (error) {
        if (!didCancel) {
          throw new Error()
        }
      }
    }

    getWeather()

    return () => {
      // useEffect cleanup function
      didCancel = true
    }
  }, [query])

  const getSearchResults = e => {
    e.preventDefault()
    setQuery(search)
    props.history.push('/weather', [data])
    setSearch('')
  }

Я ожидаю, что функция getSearchResults () обновит функцию setQuery поисковым термином. Я использовал console.log и обнаружил, что мое состояние было на шаг позади. Когда я ищу, первое возвращаемое значение является моим начальным значением запроса. Любая помощь будет оценена.

...