react中常用的优化
文章类型:React
发布者:hp
发布时间:2023-05-20
在react开发过程中,有一些常用的优化项
一:修改CSS用?进行显示隐藏控制
{!flag && <MyComonent style={{display:'none'}} />}
{flag && <MyComonent />}
// 模拟v-show
{<MyComonent style={{display:flag ? 'block' : 'none'}} />}
二:循环使用key,(不要用index作为key,会带来性能问题)
<ul>
{items.map((item, index) => (
<li key={item.id}>{item}</li>
))}
</ul>
三:使用Flagment或<></>空标签包裹减少多个层级组件的嵌套
import React from 'react';
function MyComponent() {
return (
<>
<div>Component 1</div>
<div>Component 2</div>
<div>Component 3</div>
</>
);
}
四:jsx中不要定义函数:避免在组件内直接定义函数,因为函数定义会在每次组件渲染时重新创建,可能导致性能问题
import React from 'react';
// 定义函数
function handleButtonClick() {
console.log('Button clicked!');
}
// 定义组件
function MyComponent() {
return (
<button onClick={handleButtonClick}>Click Me</button>
);
}
五:使用shouldComponentUpdate,进行控制组件是否重新渲染
class MyComponent extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
// 根据 nextProps 和 nextState 的值进行判断
// 如果希望组件更新,则返回 true
// 如果不希望组件更新,则返回 false
// 例如,判断某个属性是否发生变化
if (this.props.someProp !== nextProps.someProp) {
return true;
}
// 或者根据状态进行判断
if (this.state.someState !== nextState.someState) {
return true;
}
// 默认情况下,返回 true,表示始终更新组件
return true;
}
render() {
// 组件的渲染逻辑
return <div>My Component</div>;
}
}
六:Hooks缓存数据和函数(useMemo 和 useCallback)
import React, { useCallback } from 'react';
function MyComponent() {
const handleClick = useCallback(() => {
// 处理点击事件
doSomething();
}, [dependency]);
// 使用 handleClick 作为事件处理函数
return <button onClick={handleClick}>Click Me</button>;
}
function MyComponent2() {
const expensiveResult = useMemo(() => {
// 计算耗时的结果
return computeExpensiveResult(dependency);
}, [dependency]);
// 使用 expensiveResult
return <div>{expensiveResult}</div>;
}
七:使用异步组件
<Suspense fallback={<div>loading...</div>}>
<OtherComp />
</Suspense>
八:路由懒加载
const Home = lazy(/**webpackChunkName:'h=Home'**/()=>import('./Home'))
九:使用next.js,SSR渲染