建站,设计logo的网址,黑马程序员学费多少,分销网站什么是Hooks
Hooks从语法上来说是一些函数。这些函数可以用于在函数组件中引入状态管理和生命周期方法。
React Hooks的优点
简洁 从语法上来说#xff0c;写的代码少了上手非常简单 基于函数式编程理念#xff0c;只需要掌握一些JavaScript基础知识与生命周期相关的知识不…什么是Hooks
Hooks从语法上来说是一些函数。这些函数可以用于在函数组件中引入状态管理和生命周期方法。
React Hooks的优点
简洁 从语法上来说写的代码少了上手非常简单 基于函数式编程理念只需要掌握一些JavaScript基础知识与生命周期相关的知识不用学react Hooks使用全新的理念来管理组件的运作过程与HOC相关的知识不用学React Hooks能够完美解决HOC想要解决的问题并且更可靠Mobx取代了Redux做状态管理 代码复用性更好与Typescript结合更简单
React Hooks的缺点
状态不同步 在异步操作的函数中访问的状态还是原来的状态的值useEffect依赖问题 当useEffect依赖的数据变多后会导致频繁触发
React Hooks的注意事项
命名规范 自定义Hooks的命名一律使用use作为前缀形如useXXX仅在最外层调用React Hooks仅从react函数中调用react Hooks 在自定义Hooks或者组件中调用Hooks
useMemo
useMemo主要是用来实现性能优化的目的。
useMemo(callback,array):
callback回调函数用于处理逻辑arrayarray中包含需要监听的依赖当依赖值发生变化时重新执行callback。
useMemo()会返回一个函数称之为memoized。
import React,{useMemo,useState} from reactconst TestCom React.memo((){return /
});function App(){const [user,setUser] useState({name:hello,userSex1})const filterSex useMemo((){return user.userSex 1 ? 男 : 女},[user]);return span{filterSex}/spanTestCom/TestCom/
}只有当user触发更新的时候才会重新触发filterSex内部的计算这样就到达缓存性能优化的目的了。
注意事项
useMemo应该用于缓存函数组件中计算资源消耗较大的场景因为useMemo本身就占用一定的缓存在飞必要的场景下使用反而不利于性能的优化在处理量很小的情况下使用useMemo可能会有额外的使用开销
useCallback
useCallback用于缓存一个函数无论渲染多少次函数都是同一个函数这样可以减小不断创建新函数带来的性能和内存开销问题。
useCallback(callback,array)
callback函数用于处理逻辑array控制useCallback重新执行的数组array内state改变时才会重新执行useCallback
import {useCallback,useState} from react
function App(){const [state,setState] useState();const input useCallback((e){setState(e.target.value); },[]);return input onInput{(e)input(e)} //
}注意事项
useCallback需要配合useMemo使用。这是因为React.memo方法会对props做浅层比较。如果props没有发生改变则不会重新渲染。
自定义Hooks
自定义Hooks最重要的作用是逻辑复用并非数据的复用也不是UI的复用。
自定义Hooks就是声明一个函数函数名根据命名规范以use作为开头在函数内部可以使用任意内置Hooks。
import {useEffect}from react
export default function useDomTitle(title){useEffect((){document.title title; },[]);return;
}使用自定义Hooks时在需要使用的组件中导入Hooks
import useDomTitle from ./hooks/useDomTitle
function APP(){useDomTitle(hello);return /
}注意事项
减少useState的数量使用较少的useState可以是Hooks的返回更容易在组件中的实现更简单。有限考虑可读性合理拆分state对象中的内容合理使用Hooks的返回值合理拆分Hooks不0