日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語言 正文

React經(jīng)典面試題之倒計(jì)時(shí)組件詳解_React

作者:lucasFu ? 更新時(shí)間: 2022-06-01 編程語言

閑聊

關(guān)于面試大家常常吐槽:“面試造火箭,工作擰螺絲。”,從而表達(dá)了對(duì)工作內(nèi)容和能力要求匹配不一的現(xiàn)狀。

不排除有些公司想要探查候選人的技術(shù)上限或者說綜合技術(shù)能力,希望得到一個(gè)可拓展性更高的人才。也有些公司是不知道如何篩選候選人,所以隨便找了一些網(wǎng)上的面試題,各種原理,細(xì)枝末節(jié)的東西。不是說這些東西不好,但我覺得首要考察候選人是否能夠勝任該崗位,同時(shí)他如果能懂原理,還有細(xì)節(jié),那自然是錦上添花。

閑話聊完了,關(guān)于React我覺得能考察實(shí)際能力一道題:怎么實(shí)現(xiàn)一個(gè)倒計(jì)時(shí)組件

倒計(jì)時(shí)組件——需求描述:

寫一個(gè)函數(shù)式組件CountDown,設(shè)置一個(gè)傳入最大值的屬性,每一秒減一,直到為0。

問題

  • 怎么設(shè)計(jì)。
import { useState } from "react"
function CountDown({max = 10}){
  const [count,setCount] = useState(max)
    
  useEffect(()=>{
    if(count>0){
      setTimeout(()=>{
        setCount(count-1)
      },1000)
    }
  })
  return <h1>{count}</h1>
}
export default CountDown
  • 如果我在父級(jí)改變了prop后要重置計(jì)數(shù)怎么做呢?

我們?cè)儆靡粋€(gè)useEffect去進(jìn)行處理:

import { useState } from "react"
function CountDown({max = 10}){
  const [count,setCount] = useState(max)
  
  // 倒計(jì)時(shí)邏輯
  useEffect(()=>{
    if(count>0){
      setTimeout(()=>{
        setCount(count-1)
      },1000)
    }
  })
  
  // 重置計(jì)數(shù)
  useEffect(()=>{
    setCount(max)
  },[max])
  
  return <h1>{count}</h1>
}
export default CountDown
  • setTimeout可能會(huì)造成內(nèi)存泄露我們?cè)趺刺幚砟兀?/li>

通過useEffect的返回函數(shù)處理。

import { useState } from "react"
function CountDown({max = 10}){
  const [count,setCount] = useState(max)
  
  // 倒計(jì)時(shí)邏輯
  useEffect(()=>{
    let timer = null;
    if(count>0){
      timer = setTimeout(()=>{
        setCount(count-1)
      },1000)
    }
    return ()=>{
      clearTimeout(timer)
    }
  })
  
  // 重置計(jì)數(shù)
  useEffect(()=>{
    setCount(max)
  },[max])
  
  return <h1>{count}</h1>
}
export default CountDown

最后

一個(gè)簡(jiǎn)簡(jiǎn)單單的組件還是包含了很多知識(shí)點(diǎn)的,不僅能夠考察候選人的基礎(chǔ)技術(shù)能力,還能考察他的一個(gè)邏輯思維能力。

原文鏈接:https://juejin.cn/post/7080388529355767821

欄目分類
最近更新