iThome
鐵人賽
30天
今天來個改造吧,來把Header.jsx通通都改成Fuction Component並變為Hook的寫法~
來看Header.jsx,先來看看原本長什麼樣子吧
/src/components/Header.jsx
import React, { Component } from 'react'
export default class Header extends Component {
constructor(props) {
super(props)
this.state = {
count: 0
}
}
componentDidMount() {
window.addEventListener('keydown', this.onKeyDown)
}
onKeyDown(e){
console.log('按下了鍵盤!', e.keyCode)
}
componentWillUnmount(){
window.removeEventListener('keydown', this.onKeyDown)
}
render() {
return (
<div className="header">
<h3>{this.props.title}</h3>
<p
onClick={
e =>
this.setState({ count: this.state.count + 1 })
}
>
{this.state.count}
</p>
</div>
)
}
}
一次改完後:
import React, { useState, useEffect } from 'react'
const Header = (props) => {
// 先把props需要的值定義出來
const { title } = props
// 設定state
const [count, setCount] = useState(0)
useEffect(() => {
// componentDidMount
window.addEventListener('keydown', onKeyDown)
return () => {
// componentWillUnMount
window.removeEventListener('keydown', onKeyDown)
}
}, []) // 這裡設定為[]代表state與props變化都不會執行,所以可以作為componentDidMount
// 原本的function改為arrow function
const onKeyDown = (e) => {
console.log('按下了鍵盤!', e.keyCode)
}
return (
<div className="header">
<h3>{title}</h3>
<p
onClick={
e =>
// this.setState({count: count + 1}) => setCount
setCount(count + 1)
}
>
{count}
</p>
</div>
)
}
// 輸出預設函式Header
export default Header
接下來來介紹一個好用的套件MUI,MUI能夠做甚麼?能讓不只新手,甚至是老手都可以快速的開發前端網頁,MUI上有很多套好的Component,讓你不需要太多美術天分就能夠建立一個一定水平的美觀網頁!
安裝套件的方法很簡單,先把專案停止,並在終端機上打npm
的安裝指令
官網的安裝方式是直接安裝三種套件,但也可以視使用情況只安裝@mui/material
(空白隔開可一次安裝多個套件)
npm install @mui/material @emotion/react @emotion/styled
比如說我要使用MUI的App bar的話可以先點原始碼,之後點選js查看範例程式碼。
不過範例只是參考用的,可能沒有全部的用法都寫上去,所以建議還是到API處看所有的參數有哪些。
資料來源:https://mui.com/material-ui/api/app-bar/
MUI可以加快開發網頁的速度與做到一定的美觀程度,當然如果有其他需求也可以參考使用其他套件,就看自己需要甚麼囉!之後都會盡量運用MUI來實作專案囉~畢竟不太會做太花俏的動畫與美術設計的我還是很需要的。XD
對資安或Mapbox有興趣的話也可以觀看我們團隊的鐵人發文喔~