在 React 函數(shù)式組件中使用 useState猿规, 變量,useRef 的時(shí)機(jī)
- 變量
變量在每次組件重新渲染的時(shí)候都會被重新進(jìn)行賦值宙橱,所以如果你想要保留之前操作的狀態(tài)的話就不要使用變量
- useState
組件更新不會改變之前的狀態(tài)姨俩,可以保存狀態(tài)
- useRef
也可以保存我們的狀態(tài)
那么問題來了: 我們什么時(shí)候該用 useState 什么時(shí)候該用 useRef 呢?
useState: 當(dāng)我們需要在狀態(tài)改變的時(shí)候重新渲染視圖师郑,那么我們就使用 useState 來保存我們的狀態(tài)
useRef: 如果我們只是想保存狀態(tài)环葵,而且可以同步更新&獲取我們的狀態(tài),那么就使用 useRef
useRef 的特點(diǎn)
每次渲染 useRef 返回值都不變宝冕;
ref.current 發(fā)生變化并不會造成 re-render;
ref.current 發(fā)生變化應(yīng)該作為 Side Effect(因?yàn)樗鼤绊懴麓武秩荆┗#圆粦?yīng)該在 render 階段更新 current 屬性。
useRef 注意事項(xiàng):
- ref.current 不可以作為其他 hooks(useMemo, useCallback, useEffect)依賴項(xiàng)猬仁;ref.current 的值發(fā)生變更并不會造成 re-render, Reactjs 并不會跟蹤 ref.current 的變化。
函數(shù)組件使用 createRef 不行嗎先誉?
createRef 主要解決 class 組件訪問 DOM 元素問題湿刽,并且最佳實(shí)踐是在組件周期內(nèi)只創(chuàng)建一次(一般在構(gòu)造函數(shù)里調(diào)用)。如果在函數(shù)組件內(nèi)使用 createRef 會造成每次 render 都會調(diào)用 createRef