javascript - React - 不必要的渲染
问题描述
我正在学习 ReactJS。我想使用功能组件。在我的组件中,我有一个文本框和一个清除按钮。
我担心的是 - 每当我从键盘输入字符以输入文本框的信息时,我都会search account called!!!
在控制台输出中看到 。如果我输入 5 个字符,我会看到 5 次 - 这基本上意味着整个组件被重新渲染 & 方法重新定义.rt?
这不是不好的做法并影响性能吗?还有其他选择吗?
import React, { useState, useContext } from 'react';
import AccountContext from . './accountContext'
const SearchAccounts = () => {
const [text, setText] = useState('');
const onChange = (evt) => setText(evt.target.value);
console.log('search account called!!!');
// some methods are defined here
onSubmit = () => {...}
onClear = () => {...}
return (
<div>
<form onSubmit={onSubmit} className="form">
<input
type="text"
name="text"
value={text}
onChange={onChange}
placeholder="Search Accounts..."
/>
<input type="submit" value="Search" className="...." />
</form>
<button
className="...."
onClick={onClear}
style={getClearStyle()}
>Clear</button>
</div>
);
}
export default SearchAccounts;
解决方案
重新渲染不一定很昂贵,您必须接受您的组件会频繁重新渲染,以便将数据中的更改传播到 UI。您的示例非常便宜,因为组件很小并且不会在其返回函数中呈现任何其他组件 - 这是组合必须经常重新呈现的 React 组件的理想方式。
您还必须记住,每次组件重新渲染时,您的 JSX 都不会丢弃所有 HTML 元素并将其附加到 DOM。仅应用了最后一次渲染和当前渲染之间的差异,这使得 React 和其他前端框架能够在大规模构建时创建流畅和快速的 UI。
如果并且当您确实在组件中遇到瓶颈时,您可以使用记忆技术(React.memo
在功能组件上下文中,shouldComponentUpdate
在类上下文中)来防止定期渲染组件影响其子组件的性能。通常最好在项目或代码单元结束时执行此操作,并且仅作为最终措施,因为记忆化逃逸内置在 React 优化中,如果您使用不当,实际上可能会导致比它解决的问题更多的问题。结构良好的组件树和基于通量的状态解决方案将缓解大多数性能问题。
推荐阅读
- c++ - 挂起的线程时间
- reactjs - React useState not rendering with objects
- internationalization - i18next-http-middleware - 如何使用异步 LanguageDetector 并访问请求对象?
- angular - Angular 12 迁移到 iONIC 15 滚动问题
- rust - 使用依赖项的依赖项?
- python - 如何在 SQLITE3 Python 中制作食谱中的成分列表
- c++ - C ++ VTK使用指针初始化卷
- scala - 使用 Akka Streams 设置正常关闭的更好方法
- javascript - 我们如何计算以英里和英尺为单位的多个纬度和经度的坐标?
- coveralls - 工作服:PR 中的覆盖差异和警报