啊,反应!我们喜爱的用于构建 UI 的库。它就像一剂神奇的药剂,让我们的网络应用程序感觉具有交互性和快速性——直到有一天,它却没有了。突然,你注意到事情变慢了。点击按钮就像用信鸽寄信一样。您的应用程序从闪电般的速度变成了慢吞吞的速度,用户开始给您“看”。
但是别担心!就像咖啡可以解决大部分生活问题一样(或者我们是这么认为的),一些关键技术可以增强你的 React 应用程序并使其恢复到最高速度。让我们探索 6 种简单的方法来优化你的 React 应用程序,让它比你每天喝咖啡更快。
曾经走进一个房间,打开所有的灯,然后意识到你只需要一盏灯吗?当你将所有内容捆绑成一大块时,这就是你的 React 应用程序所做的事情。相反,通过代码分割,您只需加载应用程序当前需要的部分。就像逐个房间打开灯一样!
使用 React.lazy() 和 Suspense 是实现此目的的完美方法:
import React, { Suspense } from 'react'; const LazyComponent = React.lazy(() => import('./LazyComponent')); const App = () => { return (Loading...}> ); }
为什么有帮助:代码分割通过推迟加载未使用的代码直到必要时来减少应用程序的初始加载时间。用户无需等待整个应用程序加载即可看到屏幕上的内容。
想象一下,订购一份披萨,却收到了一年的食品杂货。听起来很荒谬,对吧?好吧,这就是当您预先加载所有图像时会发生的情况。相反,延迟加载图像,因此您只获取必要的图像,就像一次订购一个披萨一样。
使用像react-lazyload这样的库是一个快速解决方案:
import LazyLoad from 'react-lazyload';
为什么有帮助:通过延迟加载图像,您可以减少初始页面加载时间,并且仅在需要时下载图像,从而提高性能和用户体验。
就像你不断重复使用同一个咖啡杯以节省清洗时间一样,如果你允许,React 可以重复使用值和函数! useCallback 和 useMemo 是帮助您存储昂贵的计算或函数的钩子,因此它们不会在每次渲染时重新计算。
useMemo 示例:
const expensiveCalculation = (num) => { return num ** 2; }; const MyComponent = ({ num }) => { const squaredNumber = React.useMemo(() => expensiveCalculation(num), [num]); return{squaredNumber}; }
useCallback 示例:
const handleClick = useCallback(() => { console.log("Clicked"); }, []);
为什么有帮助:使用 useMemo,React 不必重做昂贵的计算。 useCallback 会阻止您在每次渲染时创建新函数。这可以让 React 平稳运行——就像升级 RAM 一样!
你有一个朋友一遍又一遍地重复同一个故事吗? React 也可以像这样——即使不需要,也会重新渲染组件!这就是 React.memo 的用武之地,它阻止 React 重新渲染组件,除非它们的 props 发生变化。
const MyComponent = React.memo(({ value }) => { return{value}; });
为什么有帮助:React.memo 就像告诉 React,“嘿,你以前听说过这个!除非有新的东西,否则不要重复。”它避免了不必要的重新渲染,节省了时间和资源。
提升状态是 React 中的常见模式,但有时我们会因为将状态提升得太高或在错误的位置管理太多状态而感到内疚。这可能会导致过度的重新渲染。尽可能保持组件本地状态,并仅在真正必要时提升状态来避免不必要的重新渲染。
const ParentComponent = () => { const [sharedState, setSharedState] = useState(false); return (> ); } const ChildComponent = ({ sharedState }) => { return {sharedState ? 'Active' : 'Inactive'}; } const AnotherChild = ({ setSharedState }) => { return ; }
为什么有帮助:通过更仔细地管理状态并仅在需要时提升它,您可以避免兄弟组件不必要的重新渲染。这可以让您的应用程序专注且高效。
想象一下,有人疯狂地在搜索栏中输入内容,而您的应用程序试图处理每一次击键。糟糕的React可能是子弹出汗了!输入去抖动 - 仅在用户暂停后处理输入的过程,而不是在每次按键时处理输入。
使用lodash.debounce可以解决这个问题:
import _ from 'lodash'; const Search = () => { const [query, setQuery] = useState(''); const debouncedSearch = _.debounce((input) => { // Do your search logic console.log(input); }, 500); const handleChange = (e) => { setQuery(e?.target?.value); debouncedSearch(e?.target?.value); }; return ; }
为什么有帮助:React 不会在每次击键时都陷入恐慌,反跳动可以让它喘口气。这可以确保在处理实时用户输入(例如搜索或表单字段)时获得更好的性能。
结论:优化 React 应用程序并不是什么火箭科学——它更像是确保你不会一口气喝六杯咖啡!从代码分割到延迟加载图像,这些技术将帮助您保持 React 应用程序的快速响应。因此,下次当你的应用程序开始感觉迟缓时,请记住:这不是 React 的错——它只是需要一点优化!
请记住,优化 React 应用程序是一种平衡。您不需要立即投入所有这些技术。相反,确定您的应用程序的瓶颈,应用适当的优化,然后观察您的应用程序变得比您喝完咖啡的速度还要快!
感谢您的阅读,如果您喜欢这篇文章,请分享并留下建议。
网站:Hardik Gohil
Github:https://github.com/HardikGohilHLR
Linkedin:https://www.linkedin.com/in/hardikgohilhlr
谢谢❤️
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3