javascript - 在另一个 API 调用之前清除 api 响应数组
问题描述
我面临的 API 响应数组(在我的情况下是城市)的问题是存储和映射天气搜索的先前结果。这是我不想要的。我想用当前的搜索 API 响应结果替换以前的结果。这是代码。(我是reactjs的新手)
import React from 'react';
import { useState,useEffect } from 'react';
import ReactDOM from 'react-dom';
const Content=(props)=>{
const [cities, setItems] = useState([]);
// const API=api;
const appi=props.api;
console.log(props.api);
console.log(cities)
useEffect(() => {
if (appi) {
(async () => {
try {
const response = await fetch(appi);
const result = await response.json();
const updatedCities =cities.concat(result)
setItems(updatedCities);
} catch(err) {
console.error(err);
}
})();
}
}, [appi]);
return (
<ul>
{cities.map(citi => (
<li key={citi.city.id}>
The city id is {citi.city.id}
The city name is {citi.city.name}
The temparature is {citi.list[0].main.temp}
</li>
))}
</ul>
)
}
export default Content;
这是代码的输出如您所见,有两个对象已被映射。但应该只有一个对象。如何解决。ps 我已经尝试将 setItems([ ]) 放入 useEffect 但没有奏效。谢谢
解决方案
我已经解决了这个问题。这是答案。“array.shift()” - 它删除了数组的第一个元素。所以它在连接它们之前删除了“城市”数组的第一个元素。
useEffect(() => {
if (appi) {
(async () => {
try {
const response = await fetch(appi);
var result=[];
result = await response.json();
cities.shift();
const updatedCities =cities.concat(result)
setItems(updatedCities);
} catch(err) {
console.error(err);
}
})();
}
}, [appi]);
推荐阅读
- python - 如何拆分数组列表并在python中切换数组的位置
- react-native - 如何在一台手机的不同屏幕上测试反应原生屏幕 UI
- node.js - 我收到 Nodejs 错误 EPERM:3000 的原因是什么?
- django - 通过 Github 将 Django 应用程序部署到 Azure 时禁用 collectstatic 命令
- ruby - 厨师客户端跳过包安装在气隙服务器上
- asp.net - 触发路径过滤器不会使管道自动化
- javascript - React:如何将表单验证从所有字段的 onSubmit 验证更改为表单中每个字段的 onBlur 即时验证?
- html - Socket.io:创建新连接时仅连接一个客户端
- php - 浏览器刷新 Laravel 时丢失 SwaggerUI JWT 令牌
- vue.js - 如何在 vue 中正确设置 d3-zoom?