首页 > 解决方案 > 反应useEffect触发器虽然依赖值保持不变?

问题描述

为什么尽管我没有执行 setTest 来更改测试值,但日志仍然触发?我希望第一次日志不应该触发,因为测试值保持为 0?

function App() {
  const [test, setTest ] = useState(0)

  useEffect(() => {
    console.log('log')
  }, [test])

  return (
    <div className="App">
      <h1>Hello CodeSandbox</h1>
      <h2>Start editing to see some magic happen!</h2>
    </div>
  );
}

我有这样的场景。在第一次加载时不做任何事情,然后如果用户在页面上选择一个选项然后做某事,我该如何使用 useEffect 来做到这一点?

标签: javascriptreactjs

解决方案


来自 https:使用效果挂钩

useEffect 有什么作用?通过使用这个 Hook,你告诉 React 你的组件需要在渲染之后做一些事情。React 会记住您传递的函数(我们将其称为“效果”),并在执行 DOM 更新后稍后调用它。

您的组件被渲染、useEffect触发,并且您的日志运行。

听起来你可能会混淆useEffect(它只接受一个参数,一个回调)与其他接受多个参数的钩子。

---- 编辑(评论相关)----

useEffect不是基于类和方法的直接替代,但由于它运行的时间,它通常可以用来替代那些方法。 请参阅 以获取更多信息。您可能还想阅读相关的钩子。componentDidMountcomponentDidUpdateuseLayoutEffect

如果您的意图是在“加载”时连接一些逻辑,例如事件处理程序,则不需要挂钩来执行此操作。相反,您只需要一个 React 事件处理程序属性,例如。

<option onChange={changeHandler} />

(有关详细信息,请参阅。)


推荐阅读