今年以来前端团队推荐使用 hooks,恰逢新开发一个产品,使用了 hooks 体验了一番。
首先要说的 hooks 仅限用于函数组件,那么下面就说说使用频繁的几个。
一、useState
useState 的出现解决了函数组件的 state 使用问题。
| 12
 3
 4
 5
 6
 7
 
 | const [status, changeStatus] = useState(false)
 return (
 <div>
 <button onClick={() => changeStatus(!status)}>切换</button>
 </div>
 )
 
 | 
二、useEffect
一般会被认为是 componentDidMount、componentDidUpdate 和 componentwillUnmount 的集合体。
这种说法也不算错。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 
 | useEffect(() => {
 
 xxx();
 return () => xxx
 }, []);
 
 
 useEffect(() => {
 
 xxx();
 }, []);
 
 useEffect(() => {
 return () => xxx
 }, []);
 
 | 
三、useRef
如果你不想粗暴的去获取 dom,而是更为优雅的使用 dom,你可以试试 useRef,当然如果是 class 组件可以用 createRef
| 12
 3
 4
 
 | const thisRef = useRef(null);
 
 return <div ref={thisRef}></div>
 
 | 
四、useReducer
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | const [items, dispatch] = useReducer((state, action)=> {
 switch(action.type){
 case 'add':
 return {
 ...state,
 xxx
 }
 default:
 return state
 }
 },[])
 
 | 
五、useImperativeHandle/forwardRef
forwardRef 可以暴露整个子组件给父组件
| 12
 3
 4
 5
 
 | const ChildForm = forwardRef((props, ref) {return(
 <form ref={ref} {...props}/>
 )
 });
 
 | 
配合 useImperativeHandle 成对使用的情况下,可以暴露指定的属性或方法给父组件
| 12
 3
 4
 5
 6
 7
 8
 9
 
 | const ChildForm = forwardRef((props, ref) {useImperativeHandle(ref, () => ({
 getValues: () => {},
 param,
 }));
 return(
 <form {...props}/>
 )
 });
 
 | 
六、memo
memo 函数式组件的优化方法,类似 class 组件中 PureComponent
| 12
 
 | const Ele = memo(() => <div ref={thisRef}></div>);
 
 | 
更多的 hooks 就不一一介绍了。
参考:
https://react.docschina.org/docs/hooks-intro.html