当前位置: 首页 > 面试题库 >

使用useEffect,如何跳过对初始渲染的效果?

弘和同
2023-03-14
问题内容

使用React的新效果挂钩,如果重新渲染之间某些值没有改变,我可以告诉React跳过应用效果-来自React文档的示例:

useEffect(() => {
  document.title = `You clicked ${count} times`;
}, [count]); // Only re-run the effect if count changes

但是上面的示例将效果应用于初始渲染,以及随后在count已更改的地方重新渲染。如何告诉React跳过初始渲染的效果?


问题答案:

如指南所述,

效果挂钩(useEffect)增加了从功能组件执行副作用的功能。它的作用与React类中的componentDidMount,componentDidUpdate和componentWillUnmount相同,但统一为一个API。

在指南中的此示例中,预期count仅在初始渲染时为0:

const [count, setCount] = useState(0);

因此,它将componentDidUpdate与其他检查一起使用:

useEffect(() => {
  if (count)
    document.title = `You clicked ${count} times`;
}, [count]);

基本上,这是可以使用而不是可以使用的自定义挂钩的useEffect工作方式:

function useDidUpdateEffect(fn, inputs) {
  const didMountRef = useRef(false);

  useEffect(() => {
    if (didMountRef.current)
      fn();
    else
      didMountRef.current = true;
  }, inputs);
}

致谢@Tholle useRef而不是进行建议setState



 类似资料:
  • 可以通过appear特性设置节点在初始渲染的过渡: <transition appear> <!-- ... --> </transition> 这里默认和进入/离开过渡一样,同样也可以自定义 CSS 类名。 <transition appear appear-class="custom-appear-class" appear-to-class="custom-appear

  • 问题内容: 根据文档: 更新发生后立即调用。初始渲染不调用此方法。 我们可以使用新的钩子来模拟,但似乎在每次渲染后都被运行,即使是第一次也是如此。如何使它不在初始渲染上运行? 如您在下面的示例中看到的那样,它是在初始渲染期间打印的,但在初始渲染期间没有打印的。 问题答案: 我们可以使用该钩子来存储我们喜欢的任何可变值,因此我们可以使用它来跟踪函数是否是第一次运行。 如果我们希望效果在与该效果相同的

  • 我开始使用钩子,我遇到了一个问题。 我有一个状态: 最初设置为,它在初始渲染时正确渲染。 但问题是,我希望它的值是我使用hook在初始渲染中获取的数组的长度 但是我不知道阵列的长度,直到组件安装完毕。 所以,在这个函数中,我试图访问priceToFilter,但它返回,因为这是它的初始值。 但是,如果您在中看到,我将通过函数将设置为另一个值。但是,当发生在初始化挂载之后时,它不会获得新值,而是保持

  • 问题内容: 那么这是用reactjs渲染原始html的唯一方法吗? 我知道有一些很酷的方法来用JSX标记内容,但是我主要对能够呈现原始html(具有所有类,内联样式等)感兴趣。像这样复杂的东西: 我不想在JSX中重写所有内容。 也许我在想这一切错。请纠正我。 问题答案: 您可以利用npm模块。 注意:我是该模块的作者,几小时前刚刚发布了该模块。请随时报告任何错误或可用性问题。

  • 问题内容: 我知道我可以在渲染组件时通过。我也知道这种方法。但是问题是,由于我的组件不知道它的初始状态,并没有太大帮助。我做。所以我想在渲染时通过它。 这样的东西(伪代码): 我知道我可以使用a 作为初始状态,但这闻起来像是反模式。 我该怎么办? 编辑清晰度 想象一下我有一个组件。到我第一次渲染它时,初始状态对应于数据库中当前注释的快照。当用户包含评论时,此列表将更改,这就是为什么它应该是a 而不

  • 我正在尝试使用按钮(传递给另一个组件)来切换暗模式。最初,我加载一个轻主题样式表。然后,切换主题按钮应删除页面上最新加载的样式表,并将状态设置为与当前状态相反的状态。 我的理解是,然后,useEffect将“看到”状态变化并启动。这就是我们加载新样式表的地方。应用正确加载初始样式表,切换按钮可以正常工作一次,但之后就不能正常工作。第一次更改后,它会删除所有样式。使用反应开发工具,看起来状态正在正确