大家好,我叫CUGGZ。今天分享一些React开发中常见的错误以及如何避免。了解这些问题背后的细节可以防止犯类似的错误。1.PerformastateupdateafterthecomponentisunmountedCan'tperformaReactstateupdateonanunmountedcomponent报这个错是因为在组件树的某处,状态更新是在unmounted的组件上触发的。也就是说,我们无法在组件销毁后更新状态,以防止内存泄漏。constComponent=()=>{const[data,setData]=useState(null);useEffect(()=>{fetchAsyncData().then((data)=>setData(data));},[]);};比如在请求数据的时候,由于跳转到了B页面,A页面的数据请求还在进行中,但是页面已经销毁了,就会出现这种情况。那么如何解决这个问题呢?有两种方法:(1)在卸载组件时取消异步请求。第一种方法(推荐)是在卸载组件时取消异步请求。一些异步请求库提供了取消异步请求的方法。如果没有使用第三方库,可以使用AbortController取消。当组件被卸载时,这个方法基本上消除了副作用:constComponent=()=>{const[data,setData]=useState(null);useEffect(()=>{constcontroller=newAbortController();fetch(url,{signal:controller.signal}).then((data)=>setData(data));return()=>{controller.abort();}},[]);};(2)trackingcomponent是否挂载?此外,您可以跟踪组件的安装状态。如果没有挂载或者已经卸载,返回false;否则返回真:constComponent=()=>{const[data,setData]=useState(null);constisMounted=useRef(true);useEffect(()=>{fetchAsyncData().then(data=>{if(isMounted.current){setData(data);}});return()=>{isMounted.current=false;};},[]);但是,不推荐使用这种方法。这会保留对未安装组件的引用,并可能导致内存泄漏和性能问题。2.不要使用keyWarning:列表中的每个child在渲染列表时应该有一个唯一的keypropReact开发中最常见的就是遍历数组来渲染组件。在JSX中,您可以使用Array.map将此逻辑嵌入到组件中,并在回调中返回所需的组件。如下:import{Card}from"./Card";constdata=[{id:1,text:"JavaScript"},{id:2,text:"TypeScript"},{id:3,text:"React"}];导出默认函数App(){return(
