javascript - 在`useEffect`中设置useEffect钩子的依赖而不触发useEffect
问题描述
编辑:我突然想到,可能不需要在useEffect
钩子中重置变量。事实上,stateTheCausesUseEffectToBeInvoked
的实际值可能无关紧要。出于所有意图和目的,它只是一种触发方式useEffect
。
假设我有一个功能性的 React 组件,我使用useEffect
钩子初始化了它的状态。我打电话给服务。我检索了一些数据。我将这些数据提交给状态。凉爽的。现在,假设我稍后与同一个服务进行交互,只不过这次不是简单地检索结果列表,而是创建或删除单个结果项,从而修改整个结果集。我现在希望检索我之前检索到的数据列表的更新副本。此时,我想再次触发useEffect
我用来初始化组件状态的钩子,因为我想重新渲染列表,这次要考虑新创建的结果项。
const myComponent = () => {
const [items, setItems] = ([])
useEffect(() => {
const getSomeData = async () => {
try {
const response = await callToSomeService()
setItems(response.data)
setStateThatCausesUseEffectToBeInvoked(false)
} catch (error) {
// Handle error
console.log(error)
}
}
}, [stateThatCausesUseEffectToBeInvoked])
const createNewItem = async () => {
try {
const response = await callToSomeService()
setStateThatCausesUseEffectToBeInvoked(true)
} catch (error) {
// Handle error
console.log(error)
}
}
}
我希望以上是有道理的。
问题是我想重置stateThatCausesUseEffectToBeInvoked
为false
不强制重新渲染。(目前,我最终调用了该服务两次——一次 for winstateThatCausesUseEffectToBeInvoked
设置为true
然后再次设置为false
在useEffect
钩子的上下文中。此变量的存在仅用于触发useEffect
和避免我需要在其他地方进行我在 内提出的相同服务请求useEffect
。
有谁知道这可能是如何实现的?
解决方案
您可以采取一些措施来实现类似于您所描述的行为:
换个stateThatCausesUseEffectToBeInvoked
号码
如果更改stateThatCausesUseEffectToBeInvoked
为数字,使用后无需重新设置,只需不断递增即可触发效果。
useEffect(() => {
// ...
}, [stateThatCausesUseEffectToBeInvoked]);
setStateThatCausesUseEffectToBeInvoked(n => n+1); // Trigger useEffect
添加条件到useEffect
无需实际更改外部的任何逻辑,您只需将useEffect
-body 调整为仅运行 if stateThatCausesUseEffectToBeInvoked
is true
。这仍然会触发useEffect
但立即跳出,不会导致任何不必要的请求或重新渲染。
useEffect(() => {
if (stateThatCausesUseEffectToBeInvoked === true) {
// ...
}
}, [stateThatCausesUseEffectToBeInvoked]);
推荐阅读
- python - Django选择同一用户的多个模型实例
- angular - Angular 12 - 列表中的 Nest-Form 组件触发 NG0100 错误
- azure - ARM 模板输出
- response - Apache Bench“每个请求的时间”随着并发性的增加而减少
- css - 用于专注于按钮的 Css 覆盖
- cordova - 错误:JDK 1.8 或更高版本的要求检查失败。我使用的是 java 16.0
- javascript - Firestore onSnapshot() 返回 null
- wordpress - 所有页面/编号的Wordpress 5重定向
- arrays - 将 CSV 文件读入结构的动态数组 C
- g1gc - 为什么 G1GC 中的 XX:G1HeapRegionSize 必须是 2 的幂?