【发布时间】:2023-03-17 13:05:01
【问题描述】:
我在功能组件中使用反应挂钩,并且想知道当您不指定依赖项时useEffect 的用途是什么。我知道文档状态它用于副作用,但我的问题是为什么这些副作用不能在功能组件内使用纯 JS 运行?作为一个非常基本的示例,我正在使用以下代码:
import {useEffect, useState} from 'react'
function Child () {
const [clickCount, updateCount] = useState(0)
console.log('Run outside of useEffect')
useEffect(()=>{
console.log("Run inside of useEffect")
})
return (
<button onClick = {() => updateCount(clickCount+1)}> Child COmponent </button>
)
}
export default Child
正如您所期望的那样,它基本上只是一个普通的 JS 函数,在每次由按钮单击引起的重新渲染时,console.log 都会被执行。
我理解为什么您可能想在如下情况下使用useEffect,如果特定情况发生变化,您只想运行useEffect:
import {useEffect, useState} from 'react'
function Child () {
const [clickCount, updateCount] = useState(0)
console.log('Run outside of useEffect')
//this now only runs when `someVariable` changes
useEffect(()=>{
console.log("Run inside of useEffect")
}, [someVariable])
return (
<button onClick = {() => updateCount(clickCount+1)}> Child COmponent </button>
)
}
export default Child
但这引出了一个问题,除非您将依赖矩阵指定为第二个参数,否则使用useEffect 有什么意义?用普通的JS就不能正常运行副作用吗?
【问题讨论】:
-
@Naren 我不会说它是重复的,因为我没有问使用依赖数组的目的是什么,这就是那个问题所要解决的问题。我认为这个问题给出的答案与那个问题相比的差异反映了两个问题之间的差异
标签: javascript reactjs react-hooks use-effect