reactjs - 使用.set时如何使react hookstate.js停止重新渲染?
问题描述
我已经在 hookstate 中设置了一个状态对象。在一个特定的文件中,我有以下调用它:
const druidPowers = useDruidPowersState(druidPowersState)
useEffect(() => {
Axios.get('http://localhost:5000/powers/druidpowers/levelone')
.then((data) => {
const powersData = data.data.druidpowers[0].powers.levelOne
druidPowers.shapeshift.set(powersData.shapeshift)
druidPowers.naturesBoon.set(powersData.naturesBoon)
})
}, [druidPowers.shapeshift, druidPowers.naturesBoon])
druidPowers.shapeshift.powerUsage.set({
powerUse: {
hp: (characterHp, body, spirit) => {
characterHp += (body + spirit)
}
}
})
console.log(druidPowers, 'druid powers')
useEffect 中的代码完全符合我的意图。当我在 useEffect 之外添加 .set() 时,问题就出现了。控制台确认这是为我更新它。但是,它也确认它不会停止 console.log()'ing 它。我只是偶然地尝试在其中放置一个 , [] ,就像在 useEffect 上一样,但这并没有阻止它,所以只是想知道是否有人知道它为什么一直这样做。
解决方案
Hookstate 的作者在这里。每次重新渲染时都会刷新状态实例,因此每次重新渲染都会触发您的效果。替换[druidPowers.shapeshift, druidPowers.naturesBoon]
为[]
并停止运行效果。可以抑制此行的 ES Lint 投诉。
推荐阅读
- python - 如何将模式问题的行添加到python中的列表中
- python - 如何访问视图中的 django 模型字段?
- python - Selenium - Instagram 机器人:点击照片后关注用户
- flutter - ThemeData(primaryColor: Colors.red) 和提供 ColorScheme.primary 有什么区别
- angular - 未捕获(承诺):错误:未找到名称“ngForm”的导出
- java - 找不到按钮 Selenium Webdriver
- python - Azure Functions:执行函数时出现异常:Functions.x <--- 结果:失败异常:ModuleNotFoundError:没有名为“_cffi_backend”的模块
- regex - StandardSQL:我只想在括号内提取
- android - 我在检查我的电子邮件字段时遇到问题
- javascript - 如何使已删除的数据库数据反映在我的 mount() 渲染中?