[2
介绍
什么是反应备忘录?
为什么反应备忘录?
当父组件重新呈现时,其子零件也重新渲染。这可能会导致性能瓶颈,尤其是当组件显示静态数据或依靠不变的道具时。
具有深嵌套组件的应用程序可能会由于累积重新租赁而面临缓慢的性能。通过React Memo的备忘录有助于防止重新租赁不需要更新的组件,从而增强应用程序的响应能力。
导入react,{usestate}来自'react'; 功能计数器({count}){ console.log(“重新渲染的“计数器组件”); 返回
在此示例中,每当您在输入字段中输入时,计数值值保持不变,即使计数器组件重新呈现。这是一个不必要的重新渲染,我们可以通过React Memo预防。
现在,让我们用react.memo将计数器组件包裹起来。
import React, { useState } from 'react'; function Counter({ count }) { console.log('Counter component re-rendered'); returnCount: {count}
; } function App() { const [count, setCount] = useState(0); const [text, setText] = useState(''); return (); } export default App;setText(e.target.value)} placeholder="Type something..." />
React Memo In Action:一种带有列表的实用场景
步骤1:在没有备忘录的情况下创建列表组件
import React, { useState } from 'react'; const Counter = React.memo(function Counter({ count }) { console.log('Counter component re-rendered'); return问题Count: {count}
; }); function App() { const [count, setCount] = useState(0); const [text, setText] = useState(''); return (); } export default App;setText(e.target.value)} placeholder="Type something..." />
步骤2:用React Memo优化项目组件
现在,只有您单击的项目才能重新渲染,使UI更快,更有效。
import React, { useState } from 'react'; function Item({ item, onLike }) { console.log(`Rendering ${item.name}`); return (); } function ItemList() { const [items, setItems] = useState([ { id: 1, name: 'Item 1', likes: 0 }, { id: 2, name: 'Item 2', likes: 0 }, { id: 3, name: 'Item 3', likes: 0 }, ]); const handleLike = (id) => { setItems((prevItems) => prevItems.map((item) => item.id === id ? { ...item, likes: item.likes 1 } : item ) ); }; return ({item.name}
{items.map((item) => (); } export default ItemList;- ))}
静态组件
:诸如标题或页脚等不经常更改的组件。const Item = React.memo(function Item({ item, onLike }) { console.log(`Rendering ${item.name}`); return (:仅取决于呈现的组件。); });{item.name}
:列出了许多需要避免不必要的重新租赁的项目。
Q2:我可以将React Memo与类组件一起使用吗? 否,React Memo仅适用于功能组件。但是,对于类组件,可以使用Purecomponent实现类似的行为。
React Memo是减少不必要的重新订阅并提高React应用程序性能的有价值工具。通过在纯功能组件或静态UI元素上有选择地使用它,您可以在不复杂的结构中优化React应用程序。遵循以下步骤,尝试示例,并继续进行试验,以找到您项目的最佳回忆策略!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3