reactjs - 状态更改后useEffect不重新渲染
问题描述
我正在构建一个小项目以更熟悉 Hooks,但我现在遇到了一个问题:
该项目是一个天气应用程序,从 API 中提取城市的天气数据。下面的代码是应用程序的简化版本。\
import React, { useState, useEffect } from "react"
import axios from "axios"
const App: React.FC = () => {
const [weather, setWeather] = useState<any>({})
const [city, setCity] = useState<string>("London")
const [cities, setCities] = useState<string[]>([
"London",
"New York",
"Dubai",
"Berlin",
"Los Angeles",
"Sydney",
])
useEffect(() => {
axios.get(`https://api-url/?query=${city}`)
.then(res => setWeather(res.data))
.catch ...
}, [])
return (
<Drawer>
<nav>
<ul>
{cities.map((c, i) => (
<li key={i} onClick={() => setCity(c)}>
{c}
</li>
))}
</ul>
</nav>
</Drawer>
// more JSX to display weather data for current city
)
}
预期行为:
单击li
元素将状态设置city
为新城市并重新渲染 UI,加载所选城市的天气数据。
实际行为: 状态已设置,但应用程序不会重新加载数据。
解决方案
推荐阅读
- reactjs - 你甚至如何在 React 中使用 ant design 的 ConfigProvider?
- python - pygame健康显示问题
- python - Sphinx 文档创建期间的扩展错误
- excel - 计算数组中的匹配,重复一次
- godot - 标识符未在 godot 的当前范围内声明
- javascript - 在不使用 startDate 和 endDate 的情况下禁用引导日期选择器中的未来日期
- ios - 在 Xcode 13 [[UINavigationBar 外观] setBarTintColor: 无法正常工作?
- c# - C# 创建 Active Directory 用户 - 异常未知错误 (0x80005000)
- r - (R) 如果另一列中唯一的结果匹配是 NA,则根据字符串名称过滤行
- r - 基于另一个数据帧的数据帧中的字符串替换