【发布时间】:2022-07-20 16:36:49
【问题描述】:
我正在一个更大的 React 项目的上下文中研究一些优化算法。在测试一些东西时,我遇到了 React 的以下行为:即使是最简单的 React 组件,最初总是会渲染两次。我想知道为什么。
这是演示此行为的源代码:
App.tsx
import React from 'react';
import './App.css';
import Test1 from './components/Test1';
function App() {
return <Test1 />;
}
export default App;
Test1.tsx
import React, { useEffect, useRef } from 'react';
const Test1 = () => {
// useRef hooks
const counter: React.MutableRefObject<number> = useRef<number>(0);
// useEffect hooks
useEffect(() => {
counter.current++;
console.log(counter.current.toString());
}, []);
return <div>Test1</div>;
};
export default Test1;
counter.current 最初总是增加到 2。
【问题讨论】:
-
“渲染两次”是什么意思? DOM 中有两个元素还是两个
console.log? -
你使用的是 React 严格模式吗?如果是这样,这是 React 的严格模式的预期行为 - reactjs.org/docs/strict-mode.html 。更多详细信息可以在 React v18 的博客文章中找到:reactjs.org/blog/2022/03/29/react-v18.html
-
可能是因为开发中的严格模式。 Check this
-
回答第一个问题:是的,我总是得到两个“console.logs”。
-
所以,我猜@widepeepohappy 的意义是什么,它不会“渲染两次”,只渲染一次然后重新渲染,在这种情况下这是需要的 :)
标签: reactjs