reactjs - 我怎样才能摆脱这个不需要的重新渲染循环?
问题描述
这是我现在的代码(在 App.tsx 中):
const [taskState, setTaskState] = useState([] as TaskModel[])
useEffect(() => {
fetch("/task")
.then(res => res.json())
.then(responseParamerter => {
var a = responseParamerter
a.map((task: TaskModel) => {
const newTask = {
TaskID: task.TaskID,
Status: task.Status,
TaskName: task.TaskName,
TaskText: task.TaskText
} as TaskModel
setTaskState([...taskState, newTask])
})
})
}, [taskState])
但是现在我的问题来了,setTaskState 出于某种原因触发了重新渲染(或者它至少触发了 useEffect),但是 useEffect 使用了触发 useEffect 的 setTaskState。获取请求的数量很快就达到数百个,但我不知道我能做些什么。提前致谢
解决方案
当您可以一次设置所有任务时,不确定为什么要一一设置任务:
useEffect(() => {
fetch("/task")
.then(res => res.json())
.then(responseParamerter => {
setTaskState(responseParamerter
.map((task: TaskModel) => {
return {
TaskID: task.TaskID,
Status: task.Status,
TaskName: task.TaskName,
TaskText: task.TaskText
} as TaskModel
}))
})
}, [])
您使用 Array.prototype.map 错误,您忽略了回调的返回值
推荐阅读
- sql - 如何解决将数据类型 varchar 转换为 float 的错误
- c - epoll 的分段错误
- java - 为什么这个 Java 代码返回一个内存地址?
- python-3.x - Python:根据条件计算时间戳差
- sas - 在“开始”之前和“结束”之后删除观察 - SAS 代码
- xcode - 想要将 UIbutton 更改为我选择的图像
- python-3.x - 如何让 $near 在 Flask-mongoalchemy 中工作
- watchman - 如何获取和处理 JSON 更改对象?
- bash - word=$word"`expr substr '${ -b :board}' 1 3`" 的含义?
- python - 根据列表中的值从数据框中提取行