如果有错误,欢迎留言指教~ Q_Q 还没写完辣
在 React 里希望用 immutable 的方式,避免会有 side effect ,防止有改变了,而 React 不知道这件事情!
而 ref 为什麽是 mutableRefObject 呢?
因为他就是专门拿来处理 immutable 处理不了的事情
→ 当资料被改变时,不希望画面被重新渲染
*** mutable → 可以用 = 来改值(?)
const valueRef = useRef(initialValue);
valueRef 拥有 mutable 的值在 .current 属性(此时此刻的值),暂存在 ref 里
回传的 valueRef.current
在 component 的生命周期将保持不变
useRef
则是用来储存 ref
,保存特定状态立 flag在之前的章节提到,我们会用 useState 来保存内部的状态
但是当 useState
的值会变动时,就会造成画面重新渲染!!!
可是有时候我们不想要画面一直被变动啊~~~
// 还没想到
const Home = () => {
const [data, setData] = useState([]);
const submittingRef = useRef(false);
// 送资料
useEffect(()=>{
// 如果不是送资料,fetchSetData,就不能执行
if(!submittingRef.current) return false;
fetchSetData(data)
.then(data => submittingRef.current = false);
},[data]);
// 预设资料
useEffect(()=>{
fetchData(setData)
},[]);
return (
<div className="app">
<Edit add={add={setData} submittingRef={submittingRef} />
<List listData{data} deleteData={setData} submittingRef={submittingRef}/>
</div>
)
}
这就是为什麽我们需要 useRef
useRef 改变 .current 属性不会触发 render,每次 render 都会给你同一个的 ref object。
useRef
可以拿来当 this 来用// useRef
...
// this
startAutoPlay = () => {
this.stopAutoPlay();
this.timerID = setInterval(() => {
this.handleClickToNext();
}, this.props.delay);
};
stopAutoPlay = () => {
clearInterval(this.timerID);
};
另外,在 class component 里,有个
createRef
,就是 React Hook 的useRef
useRef 仅能用在 Function Component,createRef
则用在 Class Component。
最後:
参考连结:
在介绍 Task Monad 前,来介绍一个重要的概念, 想像一下,有一组阵列里面的项目都是 use...
Toast功能是可以在萤幕的下方显示一段即时的讯息文字 但文字会在几秒後消失 在Toast跳出来时,...
为什麽要建立品牌的搜寻广告活动 让使用者在搜索您的商家时可以直接进到您的商家官网,避免当使用者在搜索...
真的是大坑,从我开始学程序起,就都是用Vscode这个IDE,也因此我蛮习惯用这个IDE,不想再换别...
定义 API Response 格式 API Response 的格式没有标准答案,网路上已经有许多...