函数式组件 什么Hooks?
1.Hooks 是一些可以让你在函数组件内 '钩入' React state 及生命周期等特性函数
2.关于Hooks的 "比喻" 本质上式 自变量 和因变量处理
001. const [数值,修改数据的方法] = useState(默认值)
const [x,setX] = useState(0);
002. 使用 useMemo来缓存一个因变量
const y = useMemo(() => 2 *x +1)
003. 使用 useCallback来汉朝一个函数类型的因变量
const changx = useCallback(()=>setX(x+1),[x])
使用Hooks的好处在于:
1-1.只要x不变,y和点击事件会被缓存下来,每次使用的都是缓存的值 如果不适应这个缓存方式,每次函数式组件执行的时候,都会基于x,创建新的y和点击事件
个人建议:
这个涉及到React的性能忧患,在不涉及到性能的时候,都可以考虑不使用这两个Hooks
004. 引言 -- 函数式编程的概念: 副作用
纯函数:如果固定输入,一定会产出固定的输出,那么这个函数就是纯函数
function sum(x){
return 2 * x + 1
}
函数的副作用:在固定输出的基础上,还会做其他内容
例作:产生不固定输出/行为处理(请求数据/操作DOM)等 都可以作为函数的副作用
005. 通过 useEffect来定义 有副作用的因变量
执行三次:组件挂载时,指定的依赖数据更新时,组件卸载的时候
useEffect( ()=>{
document.title = x
},[x])// 依赖于x 当x发生改变时执行
006. useReducer:可以看作进阶版的useState
它使用redux的概念,将多个state合并成一个,本质上也是操控变量;
007. 跨组件数据传递:useContext
发送:createContext() 创建一个conterxt
接受: useContext()
无需考虑组件的层级,使用组件跨级通讯简单
008. useRef:在驱动试图的过程中触发,让我们可以去执行一些行为
小总结:
1.useState():定义自变量以及修改自变量的方法
2.useMemo() 和 useCallback():定义无副作用的因变量useCallback可以将这些函数缓存下来,这样下一次页面重新渲染的时候,某些函数就不会重新被创建了。useMemo也可以返回一个记忆函数。
3.useEffect():定义有副作用的因变量,并来处理副作用,可以实现特定的功能,如异步请求
4.使用useRef()创建了一个值后,就可以将其绑定到DOM节点上,给DOM节点增加一个ref属性,将loginRef传入,则可以通过其current属性获取到DOM节点的值。
5.useContext()useContext()可以共享状态,作用是进行状态的分发(React16.x以后的版本支持),避免了使用Props进行数据的传递
6.useReducer():Action钩子,在使用React的过程中,如遇到状态管理,一般会用到Redux,而React本身是不提供状态管理的。而useReducer()
提供了状态管理
useCallback()与useMemo()的区别:
useCallback()不会执行第一个参数函数,而是将其返回,useMemo()会执行第一个函数并且将函数执行结果返回给你。useCallback()常用记忆时间按函数,生成记忆后的时间函数传递给子组件使用,useMemo()更适合经过函数计算得到一个确定的只,比如记忆组件。