reactjs - 使用 useEffect 处理 API 调用与使用 useCallback
问题描述
这很可能是一个愚蠢的问题——我的理解是任何触发副作用的东西都应该用useEffect
. 我想知道这种理解是否正确。useCallback
特别是在进行 API 调用的情况下——在挂钩中进行 API 调用是否很好?
解决方案
如果您想基于某种道具或状态更改来执行此操作,请使用useEffect
钩子,例如,
useEffect(async ()=> {
const user = await userApi.get(props.id)
setUser(user)
}, [props.id]}
如果您想在单击按钮(或任何事件)时这样做,
const handleClick = () => {
const user = await userApi.get(props.id)
setUser(user)
}
useCallback
并不真正依赖于 api 调用或副作用。useCallback
基本上是根据依赖关系存储函数的“版本”。当依赖项发生变化时,您会得到一个新函数,因为它返回的内容会有所不同,例如,
// props.id = 1
const doSomethingCallback = useCallback(() => {
/* do something with props.id */
}, [props.id])
While props.id === 1
,doSomethingCallback
将始终引用在第一次渲染时声明的函数。如果props.id
更改为 2,useCallback
将引用一个新函数。因此,如果doSomethingCallback
是 a 的依赖项useEffect
,当props.id
更改为 2 时,useCallback
将指向一个新函数,然后会被 the 注意到useEffect
并运行其中的任何内容,例如,
useEffect(() => { /* side-effect stuff */}, [doSomethingCallback])
推荐阅读
- python - 使用 matplotlib 在条形图中并排显示多列
- visual-studio - Visual Studio 2019 CE 的 Eclipse 键盘映射
- sql-server - MSSQL 插入索引作为提示
- c - 如何摆脱分段错误(核心转储)
- javascript - POST 后模型未捕获的动态生成的隐藏字段
- excel - 如何将行标记为标题
- python - 我可以使用scrapy点击没有href但有onclick属性的按钮吗?
- flutter - Bloc 未在 initstate 中添加
- python - Row height does not work when wrapping text (xlsxwriter)
- java - 如何使用 okHttp 测试执行 HTTP 调用(以获取覆盖率)的代码