【问题标题】:Does [history.push] in useEffect dependency array cause rerenders?useEffect 依赖数组中的 [history.push] 是否会导致重新渲染?
【发布时间】:2020-11-27 20:21:09
【问题描述】:

在任何地方都找不到有关此的文档。这会导致useEffect 再次运行吗?我不希望它获取两次,这会导致我的代码出现一些问题。

import React, { useEffect } from 'react'
import { useHistory } from 'react-router-dom'

const myComponent = () => {
  const { push } = useHistory();

  useEffect( () => {
    console.log(" THIS SHOULD RUN ONLY ONCE ");
    fetch(/*something*/)
      .then( () => push('/login') );
  }, [push]);
  

  return <p> Hello, World! </p>
}

从测试来看,它不会运行两次。有没有这样的情况?

为了这个问题,假设组件的父级经常重新渲染,所以这个组件也是如此。 push 函数在渲染之间似乎没有变化 - 会不会发生变化?

【问题讨论】:

    标签: javascript reactjs react-router react-router-dom


    【解决方案1】:

    Ciao,你写useEffect的方式绝对正确。并且useEffect 不会被无限次触发。正如你所说,push 函数在渲染之间不会改变。

    所以您在useEffect deps 列表中正确添加了push,以便在fetch 请求之后调用。我在您的代码中看不到任何错误。

    【讨论】:

    • 明白了,谢谢。我想知道它是否会改变 - 我知道它不会导致循环,因为使用 push 函数不会改变 push 函数,但我希望 never 再次运行效果,如果我能帮忙的话
    • 所以你的意思是你想在 useEffect 中运行代码只是第一次并且永远不会再正确?
    • 没错,我担心它会在某个时候再次运行
    猜你喜欢
    • 1970-01-01
    • 2021-07-23
    • 2022-01-12
    • 2020-12-23
    • 2020-11-16
    • 2022-09-23
    • 2020-10-21
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多