reactjs - 如何在 useEffect Hook 中重新渲染组件

标签 reactjs redux use-effect

好吧:

  useEffect(() => {
    
  }, [props.lang]);

每次 props.lang 更改时,我应该在 useEffect 中做什么来重新渲染组件?

最佳答案

将 useEffect 视为 componentDidMountcomponentDidUpdatecomponentWillUnmount 的组合,如 React 文档中所述。

要像 componentDidMount 一样,您需要像这样设置 useEffect:

  useEffect(() => console.log('mounted'), []);

第一个参数是一个回调函数,它将根据第二个参数(一个值数组)触发。如果第二个参数中的任何值发生变化,您在 useEffect 中定义的回调函数将被触发。

但是,在我展示的示例中,我传递一个空数组作为第二个参数,并且该数组永远不会更改,因此在组件安装时将调用一次回调函数。

这样总结了useEffect。如果您有一个参数而不是空值,就像您的情况一样:

 useEffect(() => {

  }, [props.lang]);

这意味着每次 props.lang 发生变化时,您的回调函数都会被调用。 useEffect 不会真正重新渲染您的组件,除非您正在管理该回调函数内的某些可能触发重新渲染的状态。

更新:

如果您想触发重新渲染,您的渲染函数需要具有您在 useEffect 中更新的状态。

例如,在这里,渲染函数首先将英语显示为默认语言,在我的使用效果中,我在 3 秒后更改了该语言,因此渲染被重新渲染并开始显示“西类牙语”。

function App() {
  const [lang, setLang] = useState("english");

  useEffect(() => {
    setTimeout(() => {
      setLang("spanish");
    }, 3000);
  }, []);

  return (
    <div className="App">
      <h1>Lang:</h1>
      <p>{lang}</p>
    </div>
  );
}

完整代码:

Edit heuristic-rubin-pmdjk

关于reactjs - 如何在 useEffect Hook 中重新渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58015602/

相关文章:

reactjs - Expo React 警告 : Can't perform a React state update on an unmounted component. 这是一个空操作,但它表明您的应用程序中存在内存泄漏

javascript - 使用 React hooks 设置状态后如何从组件调用事件?

reactjs - 重新绘制 Y 轴间隔问题

javascript - 如何在 typescript 中预先输入 React 元素数组

javascript - 在 React Native 中,在 React Navigation v3 中单击 bottomTabNavigator 上的选项卡时,如何刷新我的组件?

reactjs - 在 mocha 测试中使用 webpack 别名

javascript - 了解Redux生命周期,(初始ajax加载不起作用)

reactjs - React Facebook 登录 - 登录后 Conceal 按钮

javascript - 将多个操作传递给 react-bootstrap 按钮中的 onClick 事件

reactjs - 通过 React useEffect 方法对数组中的 obj 进行排序