【发布时间】:2020-10-13 09:07:54
【问题描述】:
考虑代码:
APP.JS
import React, { useState, useMemo } from 'react';
import Counter from './components/Counter';
import './App.css';
function App() {
const [countA, setCountA] = useState(0);
const incrementA = () => {
setCountA(countA + 1);
};
// const memoCounter = useMemo(() => {
// return <Counter />;
// }, []);
return (
<div className='App'>
<h1>Incrementing CountA from APP.JS : {countA}</h1>
<p>
<button onClick={incrementA}>Increment A</button>
</p>
{/* {memoCounter} */}
<Counter />
</div>
);
}
export default App;
Counter.js:
import React, { useEffect } from 'react';
let renderCount = 1;
const Counter = () => {
useEffect(() => {
renderCount++;
});
return (
<div>
<h1>Rendering Counter component : {renderCount}</h1>
</div>
);
};
export default Counter;
当用户点击按钮并递增时,React 会重新渲染Counter 组件,即使我没有向它传递任何东西。
但是,当我输入 useMemo 时,它没有。
为什么?
【问题讨论】:
-
"React 重新渲染 Counter 组件,即使我没有向它传递任何东西。"你的意思是每次点击后都会渲染两次?如果是,则很可能是因为您的
<App />周围有StrictMode包装器。 -
另外,
setCountA(countA + 1);不推荐使用依赖于先前状态的状态更新方法。使用回调setCountA(count => count + 1); -
@YuryTarabanko:没有严格模式,我已经检查过了。
-
那么它应该在每次点击时渲染一次。这就是 react 的工作原理:除非你手动记忆,否则总是重新渲染。
标签: javascript reactjs react-hooks