【发布时间】:2022-01-20 23:22:22
【问题描述】:
我正在尝试制作一个应用程序,从 Graphql API 获取数据,并在获取后更新状态,但在成功请求后我获取了数据,但我无法使用该数据更新状态。当我控制台记录响应数据时,它会显示包含所需数据的数组,但是当我更新状态并控制台记录状态时,它会显示空数组。
我需要更新状态以在组件中使用它,当我这样做时会抛出 currList 未定义的错误。
这里是代码和控制台的图片。
export default function App() {
const [search, setSeach] = useState("");
const [currList, setCurrList] = useState([]);
const fetchShips = async () => {
const response = await request(gql`
{
ships {
name
home_port
image
}
}
`);
console.log("request response", response.data);
setCurrList(response.data);
console.log("currlist:", currList);
};
useEffect(() => {
fetchShips();
}, [currList]);
const Searchitems = (event) => {
setSeach(event.target.value);
setCurrList(
currList.filter((item) => {
return item.name.includes(search) || item.home_port.includes(search);
})
);
};
return (
<div className="App">
<div className="container">
<header></header>
<div className="body">
<input
type="text"
id="search"
value={search}
onChange={Searchitems}
className="input"
placeholder="Search Ships"
/>
<p>Total Count: {currList.length}</p>
<div className="ships">
{currList.map((item, index) => {
return (
<Ship
key={index}
name={item.name}
port={item.port}
img={item.image}
/>
);
})}
</div>
</div>
</div>
</div>
);
}
【问题讨论】:
-
已设置,但 setCurrList 是异步的,您可以通过将其记录到 useEffect 中来查看 currList 状态
-
尝试登录到useEffect
-
useEffect(()=> {console.log(currList)},[currList])