javascript - 为什么 React 渲染一个组件,即使我没有传递任何东西给它?
问题描述
考虑代码:
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;
计数器.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
它没有。
为什么 ?
解决方案
默认情况下,当父组件呈现 ( App
) 时,它会呈现其所有子组件 ( Counter
)。
要重载默认行为,请使用 React API,例如React.memo
:
const Counter = () => {...}
export default React.memo(Counter);
推荐阅读
- .net - 跨服务器的 IIS 文化不一致
- flutter - 断言失败:第 1205 行第 12 行:'
':不正确 - flutter - Flutter ListTile (tileColor) 有条件地
- ios - BMI 计算 Xcode
- php - 如何从此文档制作 php cURL
- angular - NullInjectorError:ShowHideService 没有提供程序
- jquery - 无法使用控制器响应数据提供数据表 ajax
- excel - 使用文件对话框时,如果文件名包含单词,则过滤文件
- docker - 如何在容器中同时满足网络和特权?
- python - 如何生成仅以 cells_in_series 作为输入参数的 PVLIB fit_desoto 模块,但其中也可能有 2 个并行?