反应 - 父组件和子组件之间的随机值不同

react - Different random value between parent and child component

我在实际项目中遇到过这个问题。为了更清楚地展示它,我构建了一个非常基本的项目,它只包含一个父组件和一个子组件。

我在父组件的主体中定义了一个随机值(无论是作为状态变量还是作为 'regular' 变量)并将其作为道具传递给子组件。
出于某种原因,当我在父组件的主体中记录 (console.log) 这个随机值时,它似乎与子组件主体中的值不同。它们在每个组件的 jsx 中是相等的,当我将值记录在父级的 useEffect 挂钩中时,但是当我将它们记录在每个组件的主体中时它们是不同的。

父组件:

import React, { useEffect } from 'react';
import ChildComponent from './ChildComponent';

function App() {
  const rand = Math.random();
  console.log('parent - in body', rand);

  useEffect(() => {
    console.log('parent - in useEffect', rand);    
  });

  return (
    <div>
      <h1>parent {rand}</h1>
      <ChildComponent rand={rand}></ChildComponent>
    </div>
  );
}

export default App;

子组件:

import React from 'react';

function ChildComponent(props) {
  console.log('child', props.rand);
  return (
    <div>
      <h3>child {props.rand}</h3>
    </div>
  );
}

export default ChildComponent;

结果(圈出控制台中不同的值):

有人可以解释这种行为吗?


更新:
我意识到 index.js 文件中的 <React.StrictMode> 负责重新渲染,因此随机变量的值不同。
然而:

这可能是重新渲染导致的问题。

记录的第一个值是第一个生成的值,在重新渲染后出现新值并且这是为 useEffect 记录的,因为 useEffect 在组件安装后执行并且DOM 已加载。

此外,重新渲染可能是您 index.js 中的 <StrictMode> 的原因,这会产生有意的重新渲染,以测试副作用并查找问题。