【明年找到好工作】React18面试题总结一

本文深入探讨了React Hooks的引入背景、如何在函数组件中实现state和生命周期,重点解析了useEffect、useRef、useContext、useReducer、useMemo和useCallback等Hooks的使用及优化。同时,文章揭示了自定义Hook的创建方法和Hooks的使用规范,并对比了Hooks与HOC和Render Prop的优点。最后,总结了在实际应用中遇到的常见问题及其解决方案。
摘要由CSDN通过智能技术生成

为什么会有 React Hooks

函数式组件的特点:

  • 没有组件实例
  • 没有生命周期
  • 没有 state 和 setState,只能接收 props

class组件:

  • 大型组件很难拆分和重构,很难测试(即 class 不宜拆分)
  • 相同业务逻辑,分散在各个方法中,逻辑混乱
  • 复用逻辑的复杂,如 Mixins、HOC、Render Prop

React 组件更易用函数表示

  • React 倡导函数式编程, view = fn(props)
  • 函数更灵活,更易拆分,更易测试
  • 但函数组件太简单,需要增强能力 (Hooks)

函数组件实现 state 和 setState

  • 默认函数组件没有 state
  • 函数组件是一个纯函数,执行完即销毁,无法存储 state
  • 需要 State Hook,即把 state 功能 “钩” 到纯函数中
const Clickbutton = () => {
    const [count, setCount] = useState(0);
    return (<button onClick={() => setCount(count + 1)}>点击{count}</button>)
}

React Hooks 如何模拟生命周期

  • 默认函数组件没有生命周期
  • 函数组件是一个纯函数,执行完即销毁,自己无法实现生命周期
  • 使用 Effect Hook 把生命周期 “钩” 到纯函数中

模拟 class 组件 DidMount 和 DidUpdate

const Demo = () => {
    useEffect(() => {
      console.log('模拟 DidMount 和 DidUpdate'); 
    });
    return (<div>生命周期</div>)
}

单独模拟 class 组件的 DidMount

const Demo = () => {
    useEffect(() => {
      console.log('单独模拟 class 组件的 DidMount'); 
    }, []);
    return (<div>生命周期</div>)
}

单独模拟 class 组件的 DidUpdate

const Demo = () => {
    useEffect(() => {
      console.log('单独模拟 class 组件的 DidUpdate'); 
    }, [count]);
    return (<div>生命周期</div>)
}

模拟 class 组件的 willUnMount

const Demo = () => {
    useEffect(() => {
      let timer = setInterval(() => {
          console.log('定时器');
      }, 1000); 
      
      // 模拟 willUnMount
      return () => {
          clearInterval(timer)
      }  
        
    }, []);
    return (<div>生命周
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海面有风

您的鼓励将是我前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值