加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

【React深入】从Mixin到HOC再到Hook

发布时间:2019-04-12 04:39:12 所属栏目:优化 来源:ConardLi
导读:导读 前端发展速度非常之快,页面和组件变得越来越复杂,如何更好的实现状态逻辑复用一直都是应用程序中重要的一部分,这直接关系着应用程序的质量以及维护的难易程度。 本文介绍了React采用的三种实现状态逻辑复用的技术,并分析了他们的实现原理、使用方

模拟componentWillUnmount

  1. function useUnMount(callback) {  
  2.   useEffect(() => callback, []);  

不像 componentDidMount 或者 componentDidUpdate,useEffect 中使用的 effect 并不会阻滞浏览器渲染页面。这让你的 app 看起来更加流畅。

ref Hook

使用useRef Hook,你可以轻松的获取到dom的ref。

  1. export default function Input() {  
  2.   const inputEl = useRef(null);  
  3.   const onButtonClick = () => {  
  4.     inputEl.current.focus();  
  5.   };  
  6.   return (  
  7.     <div>  
  8.       <input ref={inputEl} type="text" />  
  9.       <button onClick={onButtonClick}>Focus the input</button>  
  10.     </div>  
  11.   );  

注意useRef()并不仅仅可以用来当作获取ref使用,使用useRef产生的ref的current属性是可变的,这意味着你可以用它来保存一个任意值。

模拟componentDidUpdate

componentDidUpdate就相当于除去第一次调用的useEffect,我们可以借助useRef生成一个标识,来记录是否为第一次执行:

  1. function useDidUpdate(callback, prop) {  
  2.   const init = useRef(true);  
  3.   useEffect(() => {  
  4.     if (init.current) {  
  5.       init.current = false;  
  6.     } else {  
  7.       return callback();  
  8.     }  
  9.   }, prop);  

使用Hook的注意事项

使用范围

  •  只能在React函数式组件或自定义Hook中使用Hook。

Hook的提出主要就是为了解决class组件的一系列问题,所以我们能在class组件中使用它。

声明约束

  •  不要在循环,条件或嵌套函数中调用Hook。

Hook通过数组实现的,每次 useState 都会改变下标,React需要利用调用顺序来正确更新相应的状态,如果 useState 被包裹循环或条件语句中,那每就可能会引起调用顺序的错乱,从而造成意想不到的错误。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读