簡述React生命週期
state和props分別是什麼?有何差別?
state和props的使用時機分別為何?
React Router 怎麼用
先下載package (npm i react-router-dom)
React router 元件可以被分成三種
<BrowserRouter>
和 <HashRouter>
<Routes>
和 <Route>
components<Link>
and <NavLink>
components<Route path="/" element={<Home/>}></Route>
<Route path="contact" element={<Contact/>}></Route>
Link:類似HTML中的元素,用來navigate至其他頁面,包含一個to prop,裡頭寫的是你在Route定義的url,例如我們在一個購物網站,要到結帳頁面可以這樣寫
<div className="checkout-wrap">
<Link to="checkout">checkout</Link>
</div>
NavLink: 是一種特殊類型的 ,預設情況下,在它處於活動狀態時會添加active類別。我們通常在建立導覽列(navigation menu),需要寫一連串連結時使用它。
Hook的特性
useState的用處為何?
怎麼使用useEffect?
如何用 useState 來對一個 array 增減內容?
正確範例
const [arr, setArr] = useState(["item1"]);
useEffect(() => {
setArr([...arr, "item2"]);
}, []);
useEffect(() => {
console.log(arr); // ['item1', 'item2']
}, [arr]);
const [myArray, setMyArray] = useState(["a", "b", "c"]);
const removeItem = (index) => {
setMyArray((prevArr) => prevArr.filter((item, i) => i !== index));
};
useEffect(() => {
removeItem(0);
}, []);
useEffect(() => {
console.log(myArray); //["b","c"]
}, [myArray]);
避免直接修改state的內容
let [arr, setArr] = useState(["item1"]);
arr = ["item2"]
雖然說從技術角度來說這樣做是有效的,當你直接重新賦值 arr 時,React 將不會察覺到這個改變,元件也不會基於這個變化重新渲染,所以記得要用state setter去處理。
避免無限渲染(範例1)
let [arr, setArr] = useState(["item1"]);
setArr([...arr, "item2"]);
setArr 函式在被調用時會觸發元件的重新渲染,進入了函式調用、元件重新渲染的輪迴。所以應該要設定在條件觸發後再用state setter
避免無限渲染(範例2)
這個例子裡,我們設定useEffect副作用為更新arr的內容,又將arr放進deps array,所以進入不斷更新arr、運行useEffect的輪迴
const [arr, setArr] = useState(["item1"]);
useEffect(() => {
setArr([...arr, "item2"]);
}, [arr]);
以上若有任何錯誤或建議,都歡迎留言給我,謝謝😄