React的函数式组件式本身是没有状态的和其他类似于class组件的功能,所以一开始,函数组件一般只作为容器组件存在,用来展示父级组件传入的值。而16.8之后出现的 hooks(钩子),打开了函数式组件的新大门。
useState
作用:用来记录函数式组件的状态。
使用方式:
例子:
其它示例:
hooks 中再也不需要this的概念了,并且必须放到函数组件内部最外层、最上面引入 useState 和 useEffect
useState
先看一个例子:
其实就是es6的数组解构
useState(params) 设置 第一个参数的初始值
count 是解构出的第一个参数
setCount 是第二个参数 是一个函数 用来设置count
可以这么操作 setCount(count + 1); 这样 count 设置称为最新的值
useEffect
它接受2个参数,第一个是函数,第二个是数组
如果第二个参数数组为空 它就是componentDidMount 只有第一次渲染
如果二个参数数组 里面的值 设置的 值改变 它就是componentDidUpdate 只要值改变了 他就渲染
useEffect 内部 最外层 支持return () => 相当于 componentWillUnmount 卸载 来开当前组件的时候触发 并且 每次更新 都触发
对了 useState 和 useEffect 支持写多个,例如:
总结
React 16.8.0 正式增加了 Hooks ,它为函数组件引入了 state 的能力,换句话说就是使函数组件拥有了 Class 组件的功能。React.useState() 返回的第二个参数 setState 用于更新 state ,并且会触发新的渲染。同时,在后续新的渲染中 React.useState() 返回的第一个 state 值始终是最新的。为了保证 memoizedState 的顺序与 React.useState() 正确对应,我们需要保证 Hooks 在最顶层调用,也就是不能在循环、条件或嵌套函数中调用。React.useState() 通过 Object.is() 来判断 memoizedState 是否需要更新。