没有 useState,无法在 useEffect 中存储 navigator.geolocation 数据

Can't store navigator.geolocation data in useffect, with a usestate

我有一个问题,我想在渲染之前将 navigator.geolocation 的纬度和经度存储在 useEffect 中,使用空数组但是当我 console.log 我的结果显示时null.

这里是相关部分。

import React, {useState, useEffect} from 'react';

const [userPos, setUserPos] = useState({lat: null, long: null})

 useEffect(() => {
      navigator.geolocation.getcurrentposition((pos) =>{
          console.log(pos.coords.latitude + " " + pos.coords.longitude) // display VALUE
          setUserPos({ 
                lat: pos.coords.latitude,
                long: pos.coords.longitude,
           }) // store data in usestate
          console.log(userPos) // Display Null
     }, (err) => {
          console.log(err);
     },options);
    }
  })
 }, [])

那么为什么,当我在 useEffect 中记录 pos.coords 时,我有值,但在记录状态时却没有。有什么想法吗?

React 无法在中途重新渲染您的函数。而是创建一个新变量,将其传递给 set 函数并在之后使用它。请注意,重新渲染后 userPos 将在 useEffect 之外可用。因此,新变量仅在同一 useEffect 函数中对您有用。

import React, {useState, useEffect} from 'react';

const [userPos, setUserPos] = useState({lat: null, long: null})

 useEffect(() => {
      navigator.geolocation.getcurrentposition((pos) =>{
          console.log(pos.coords.latitude + " " + pos.coords.longitude) // display VALUE
          const newUserPos = { 
                lat: pos.coords.latitude,
                long: pos.coords.longitude,
           };
          setUserPos(newUserPos) // store data in usestate
          console.log(newUserPos) // Display your values
     }, (err) => {
          console.log(err);
     },options);
    }
  })
 }, [])