reactjs - 使用 useState 设置状态会在第一次调用时产生空数组
问题描述
我正在使用该google-map-react
组件,并且正在尝试设置用户单击的位置的坐标。我有坐标,但是当我第一次点击地图(点击事件被触发)时,数组coordinates
返回一个空数组。
这会导致奇怪的行为,每次点击都会返回上一次点击的坐标?谁能看到这里发生了什么?
const Map = ({ center, zoom}) => {
const [ coordinates, setCoordinates ] = useState([]);
const onMapClick = ({ lat, lng }) => {
setCoordinates([lat, lng]);
console.log(coordinates)
};
return (
<div className="map">
<GoogleMapReact
bootstrapURLKeys={{ key: 'redacted' }}
defaultCenter={center}
defaultZoom={zoom}
onClick={onMapClick}
/>
</div>
);
};
Map.defaultProps = {
center: {
lat: 53.3439,
lng: 33.0622
},
zoom: 5
}
该行为正在记录以下内容
[]
(2) [51.13790387040561, -11.71807343750003]
(2) [47.709656855536565, 2.1686453124999705]
第二个日志应该在位置 1,第三个日志应该在位置 2。
解决方案
useState 上有一个异步行为。您的 console.log() 将显示旧的。因为状态还没有更新。但是如果你把你的 console.log() 放在 useEffect 中
useEffect(() => {
console.log(coordinates)
}, [coordinates])
您将看到它在 onClick 事件之后正确显示。
您的代码工作正常。你可以把你的坐标状态放在你想使用它们的地方。
推荐阅读
- c# - 从方位角和仰角计算新的 3D 相机位置 - Helix Toolkit
- r - 如何通过 blogdown 获取雨果主题的标记版本
- swift - 图片上传不起作用,iOS Swift Multipart
- python-3.x - 在 Windows 中安装 TensorFlow 1.9
- go - Webassembly 抛出 - 内存访问越界
- javascript - ajax 工作,但它不插入到我的 sql 查询 (js/php)
- java - 如何使用 Kotlin 和 jackson ObjectMapper 从 json 中删除属性
- php - 正则表达式查找忽略所有非数字字符的数字
- c# - 为什么在成功验证令牌后身份验证失败?
- javafx-8 - 如何在 Javafx 8 中获得可编辑的 Textflow?