【发布时间】:2022-01-04 22:25:50
【问题描述】:
我遇到了问题,我想根据锻炼对象数组中包含的坐标获取城市名称。这是Files和project和sandbox的链接
export const WorkoutsData = [
{
id: 1,
coords: {latitude: 56.27360151291927,
longitude:-82.84886256490017},
},
{
id: 2,
coords: {latitude: 49.27360151291927,
longitude: -75.84886256490017},
},
{
id: 3,
coords: {latitude: 39.27360151291927,
longitude: -79.84886256490017},
}
];
import React, { useEffect, useState } from "react";
import "./styles.css";
import { WorkoutsData } from "./WorkoutLocation";
const App = () => {
const [workouts, setWorkouts] = useState(WorkoutsData);
const [cityName, setCityName] = useState([]);
const id = (Date.now() + "").slice(-10);
useEffect(() => {
workouts.map((workout) => {
fetch(
`https://geocode.xyz/${workout.coords.latitude},${workout.coords.longitude}?geoit=json`
)
.then((res) => res.json())
.then((result) => {
setCityName([`${result.staddress}, ${result.city}`]);
});
});
}, [workouts]);
return (
<>
<div key={id}>
{workouts.map((workout) => {
return <h2 key={workout.id}>{`${cityName}`}</h2>;
})}
</div>
</>
);
};
export default App;
我对代码进行了一些编辑并设法获得了唯一的位置名称,但这次我不会获得第一个锻炼对象的位置名称。然后位置名称将传递给第二个对象。
【问题讨论】:
-
在获取每次锻炼的位置时,您会不断覆盖 cityName。也许您可以构建一个城市名称数组,然后在状态中存储和读取它。
-
我将 setCityName(
${result.staddress}, ${result.city}) 更新为 setCityName(res => [...res,${result.staddress}, ${result.city}]) 并将我的 usestate 更新为 const [cityname, setCityName] = useState([]);如何映射 cityname 数组并为每个对象显示 cityname? -
当我控制台 .log(cityName) 我得到相同的 cityName 两次
-
您的
cityName变量只包含一个字符串。您每次都覆盖相同的字符串。如果要保存字符串列表,请使用列表。 -
我将 setCityName(${result.staddress}, ${result.city}) 更新为 setCityName(res => [...res, [${result.staddress}, ${result. city]}])当我渲染时,我在一个锻炼容器中获得所有位置名称
标签: reactjs dictionary fetch use-state reverse-geocoding