React:如何使用上下文变量作为依赖项来触发useEffect?

React: how to fire useeffect using context variable as dependency?

我试图找出当 useEffect 的依赖项是 useContext 变量时如何触发它。我的上下文有一个“更新”变量,该变量在某一时刻发生变化,但没有触发效果。

import { useEffect, useState, useContext } from "react"
import context from "./Context"

const Layout = () => {
    const ctx = useContext(context)
    const [updateState, setUpdateState] = useState(ctx.update)

    useEffect(() => {
        console.log("effect fired")
    }, [updateState])

    return (
        <div>
        </div>
    )
}

export default Layout

我测试了问题是否是我的上下文“更新”变量没有改变,但确实如此。我将不胜感激。

你的问题是你使用了useState。这实际上 memoized/froze updateState 的值,到此组件的第一个 运行。

您看到 useState 采用单个 arg(默认值)。仅用于组件的第一次渲染,以填充 updateState。当 ctx.update 更改时,useState 已经有一个默认设置 updateState,因此它被忽略。

相反,您可以完全删除 useState...

import { useEffect, useState, useContext } from "react"
import context from "./Context"

const Layout = () => {
    const { update as updateState } = useContext(context);
    // Notice I have removed the useState.

    useEffect(() => {
        console.log("effect fired")
    }, [updateState])

    return (
        <div>
        </div>
    )
}

export default Layout