当前位置: 首页 > news >正文

福田网站建设方案模版网站商城

福田网站建设方案,模版网站商城,沈阳h5响应式网站建设,wordpress侧栏小工具栏1. React.memo 基础 React.memo 是一个高阶组件(HOC),用于优化函数组件的性能,通过记忆组件渲染结果来避免不必要的重新渲染。 1.1 基本用法 const MemoizedComponent React.memo(function MyComponent(props) {/* 渲染逻辑 *…

1. React.memo 基础

React.memo 是一个高阶组件(HOC),用于优化函数组件的性能,通过记忆组件渲染结果来避免不必要的重新渲染。

1.1 基本用法

const MemoizedComponent = React.memo(function MyComponent(props) {/* 渲染逻辑 */
});

只有props发生变化才会重新渲染MemoizedComponent

1.2 带有比较函数的用法

const MemoizedComponent = React.memo(MyComponent, (prevProps, nextProps) => {// 返回 true 表示不需要重新渲染// 返回 false 表示需要重新渲染return prevProps.id === nextProps.id;
});

2. React.memo 使用场景

2.1 纯展示组件

const ExpensiveComponent = React.memo(function ExpensiveComponent({ data }) {// 复杂的渲染逻辑return (<div>{data.map(item => (<div key={item.id}><h3>{item.title}</h3><p>{item.description}</p></div>))}</div>);
});// 父组件
function ParentComponent() {const [count, setCount] = useState(0);const data = [/* 大量数据 */];return (<div><button onClick={() => setCount(c => c + 1)}>Count: {count}</button><ExpensiveComponent data={data} /></div>);
}

2.2 列表项组件

const ListItem = React.memo(function ListItem({ item, onItemClick }) {console.log(`Rendering item ${item.id}`);return (<li onClick={() => onItemClick(item.id)}>{item.name}</li>);
});function List({ items }) {const [selectedId, setSelectedId] = useState(null);// 使用 useCallback 来记忆回调函数const handleItemClick = useCallback((id) => {setSelectedId(id);}, []);return (<ul>{items.map(item => (<ListItemkey={item.id}item={item}onItemClick={handleItemClick}/>))}</ul>);
}

3. useMemo 基础

useMemo 是一个 Hook,用于记忆计算结果,避免在每次渲染时重复进行昂贵的计算。

3.1 基本用法

const memoizedValue = useMemo(() => {// 进行计算并返回结果return computeExpensiveValue(a, b);
}, [a, b]); // 依赖项数组,空数组时只有初始化的时候执行,没有依赖参数项state每次变化都会引起重新执行,有依赖数组室,依赖数据发生变化才会触发重新执行

4. useMemo 使用场景

4.1 昂贵的计算

function DataAnalytics({ data }) {const processedData = useMemo(() => {// 假设这是一个复杂的数据处理函数return data.map(item => ({...item,processed: expensiveOperation(item)}));}, [data]); // 只在 data 改变时重新计算return (<div>{processedData.map(item => (<div key={item.id}>{item.processed}</div>))}</div>);
}

4.2 避免子组件不必要的重新渲染

function ParentComponent({ items }) {// 记忆对象或数组类型的 propsconst memoizedValue = useMemo(() => ({data: items,config: {sortBy: 'name',filterBy: 'active'}}), [items]);return <ChildComponent options={memoizedValue} />;
}

4.3 复杂对象的派生状态

function UserDashboard({ user, transactions }) {// 计算用户统计信息const userStats = useMemo(() => {return {totalSpent: transactions.reduce((sum, t) => sum + t.amount, 0),averageSpent: transactions.length? transactions.reduce((sum, t) => sum + t.amount, 0) / transactions.length: 0,mostFrequentCategory: calculateMostFrequentCategory(transactions)};}, [transactions]);return (<div><UserInfo user={user} /><UserStatistics stats={userStats} /></div>);
}

5. 性能优化最佳实践

5.1 合理使用 React.memo

// ✅ 好的使用场景:纯组件,props 很少改变
const PureComponent = React.memo(function PureComponent({ data }) {return <div>{/* 渲染逻辑 */}</div>;
});// ❌ 不好的使用场景:props 经常变化
const FrequentlyChangingComponent = React.memo(function FrequentlyChangingComponent({ date }) {return <div>{date.toLocaleTimeString()}</div>;
});

5.2 合理使用 useMemo

// ✅ 好的使用场景:计算开销大
const expensiveValue = useMemo(() => {return someExpensiveOperation(props.data);
}, [props.data]);// ❌ 不好的使用场景:计算开销小
const simpleValue = useMemo(() => {return props.value + 1;
}, [props.value]); // 这种情况直接计算即可

5.3 配合 useCallback 使用

function SearchComponent({ onSearch }) {const [query, setQuery] = useState('');// 记忆回调函数const handleSearch = useCallback(() => {onSearch(query);}, [query, onSearch]);// 记忆计算结果const searchResults = useMemo(() => {return performExpensiveSearch(query);}, [query]);return (<div><inputvalue={query}onChange={e => setQuery(e.target.value)}/><button onClick={handleSearch}>搜索</button><ResultsList results={searchResults} /></div>);
}// 使用 React.memo 优化 ResultsList
const ResultsList = React.memo(function ResultsList({ results }) {return (<ul>{results.map(result => (<li key={result.id}>{result.title}</li>))}</ul>);
});

6. 注意事项

  1. 不要过度优化

    • 只在真正需要的地方使用 memo 和 useMemo
    • 性能测量验证优化效果
  2. 依赖项的正确使用

    • 确保依赖项数组包含所有需要的值
    • 避免依赖项过多导致优化失效
  3. 避免在循环中使用 useMemo

    // ❌ 错误示例
    {items.map(item => {const memoizedValue = useMemo(() => compute(item), [item]);return <div>{memoizedValue}</div>;
    })}
    
  4. 考虑内存使用

    • memo 和 useMemo 会占用额外的内存
    • 在内存受限的环境中要谨慎使用

7. 性能优化决策流程

  1. 首先评估是否真的需要优化
  2. 使用 React DevTools Profiler 识别性能问题
  3. 选择合适的优化策略:
    • 组件重新渲染优化:使用 React.memo
    • 计算结果优化:使用 useMemo
    • 回调函数优化:使用 useCallback
  4. 测试优化效果
  5. 持续监控性能

通过合理使用 React.memo 和 useMemo,我们可以显著提升 React 应用的性能。但记住,过度优化可能会适得其反,应该在实际需要时才进行优化。

http://www.yayakq.cn/news/819022/

相关文章:

  • wordpress添加页面的代码百度seo引流
  • 简述网站规划的主要任务十大搜索引擎入口
  • 郑州高新区网站建设进修学校 网站建设目标
  • 网站在线提交询盘系统 能直接发到邮箱网页界面设计包括哪些原则
  • 网站所有权 备案wordpress字段关联
  • 微信官方网页版seo手机关键词网址
  • 常州微网站开发四川住房与城乡城乡建设厅网站
  • 保定高端模板建站创立一个品牌要多少钱
  • 深圳市网站建设外包公司怎样用h5做网站
  • 网站建设与管理题页面设计培训排名
  • 服装公司网站策划方案物流公司网站建设模板
  • 网站备案工信部百度网站收入
  • 广东广州自己建网站公司注册个app要多少钱
  • 手机免费创建网站的软件智能设计软件有哪些
  • 网站推广页面 英语百度云 编辑wordpress
  • 长沙网站制作主要公司建筑工程教育网官方网站
  • 网站建设小程序公众号推广开发无icp备案的网站合法吗
  • 没有备案的网站 公司服务器 查到会怎么样建设银行德阳分行网站
  • 重庆九龙坡区哪里有做网站的wordpress清理缓存
  • 网站建设销售问答wordpress 全局tag
  • 贵州省建设厅官网站宁夏做网站找谁
  • 纺织面料做哪个网站好建筑网站制作
  • 如何做网站的后台管理受欢迎的汕头网站推广
  • 讲述做网站的电影网页建站费用
  • 山东省建设人才网站养生网站模板
  • 中国建设银行网站济南网点游戏币网站怎么做
  • 沧州做网站的公司网站开发建设价格附件
  • 自建网站迁移东莞中企动力
  • 电商网站建设哪好网红营销的策略
  • 有多人做网站是个人备案凡科手机网站建设