react guidance
常見的錯誤
1. 在 html 裡面寫 loop ex:
// bad 不易閱讀
<ol>
{data.map((item)=> {
<li>item</li>
})}
</ol>
// good
const lawyers = data.map((item)=> {
return <li>item</li>
})
<div>{lawyers}</div>
2. navbar footer 應該整理出資料結構後再 render
// bad
<div>首頁</div>
<div>關於我們</div>
<div>...</div>
// good
const nav = [首頁,關於我們,...]
return nav.map((item)=> <div>{item}</div>)
3. css判斷式應避免整段重複 變數處理統一放在最後面
// bad
<div class={`${isLast ? "mb-1 mt-2 ml-1" : "mb-1 mt-2 ml-3" }`} />
// good
<div class={`mb-1 mt-2 ${isLast ? "ml-1" : "ml-3" }`} />
4. 使用正確的語法
const data = "123"
let a = `${data}` // bad
let a = data // good
5. 命名統一都用駝峰 組件大寫開頭 hook小寫開頭
const MyFooter = () => <div>footer</div>
const useFooter = () => {
return [首頁,關於我們]
}
- hook檔名
// bad
hooks/use-hook
// good
hooks/useHook
- 組件檔名
// bad
components/card
// good
components/Card
6. 有意義的命名
// bad
const [isOpen, setIsOpen] = useState(true)
const [open, setOpen] = useState(true)
// good
const [isMenuOpen, setIsMenuOpen] = useState(true)
const [isCardOpen, setIsCardOpen] = useState(true)
7. 判斷是否顯示內容
// bad
{!experience ? (
""
) : (
<div className="mt-6 sm:mt-12">
<div className="container">
<div className="sm:w-1/4">
<h3 className="title-border-sm font-serif text-xl mb-6">
學經歷
</h3>
</div>
<div className="sm:w-3/4">{nl2br(experience)}</div>
</div>
</div>
)}
// good
const component = () => {
// ....
}
{ experience && component }
- 反判斷
if (!isFalse) ...
if (isTrue) ...
- create element 優點:盡量在程式碼內減少html以及jsx語法
{isOpen ? (
<XIcon className="block h-6 w-6" onClick={()=> console.log("click")} />
) : (
<MenuIcon className="block h-6 w-6" onClick={()=> console.log("click")} />
)}
const MenuIcons = ({ isOpen }) => {
return React.createElement(isOpen ? XIcon : MenuIcon, {
className: "block h-6 w-6",
})
}
const icon = React.createElement(isOpen ? XIcon : MenuIcon, {
className: "block h-6 w-6",
})
<>{icon}</>
其他
1. 分支名不要用中文
// bad
feature/卡片組件
// good?
feature/add_card
2. 商業邏輯或是難以理解的地方添加註解
diction = Object.keys(keywords).join("|0x0008|101\n") + "|0x0008|101\n"
3. commit 要寫得有意義 發pr前可以整理一下
// bad
fix: 補個槓槓
fix: 加上註解
// good?
chore: 整理code
url補上斜線 添加url註解
4. 少寫css 理論上大部分的東西 tailwindcss 都做得出來
5. pr的描述要提到所有寫到的東西
6. 使用commit squash
- 整理成一筆 未來可以一次找到全部的相關更改內容
- 搭配 source tree