2021年1月24日 星期日

應用 TypeScript Eunm 完成分類,跟就職一個月心得

    很久沒發文了感覺很廢,所以舉一個最近工作學到的東西,公司採用的框架是 React、Nest、

Typescript、Styled,所以階段性任務都在學怎麼切 React Component,跟尋寶(找有沒有前人建好

的 Component可以套或事先包好的常數),還有整個開發流程,組織算蠻扁平的,發現測試環境

掛了可以直接去問後端,同事也蠻友善。


任務大概是做一顆有三種狀態的按鈕,onClick 一個方法大家都會,Vue 跟 React 有個不同的

地方是渲染方式,Vue 只要在 data 先 set 好,數據雙向綁定跟畫面渲染通常沒太大問題,

但 React 數據是向下傳遞,一開始我還想要作兩個組件然後平行組件傳,在 React 依然是件困難

的事,並且公司的東西也不能因為一個小組件就讓你隨便傳值到 store 借放,後來作成一個組件

將按鈕控制的畫面跟按鈕放在一起,大不了把按鈕用絕對定位定到天涯海角,因此還要將畫面

的狀態設置成一個 hook ,React 才會監控並在數據變更的時候重新渲染,一開始我會 if 連發:


let status = 0

if( status === 0 ){

    狀態0

    status = 1   //切換到下一個狀態

} else if (status === 1){

    狀態1

    status = 2   //切換到下一個狀態

} else {

    狀態2

    status = 0

}


後來運用 switch:


switch(status){

case '0':

    狀態0,

    break

case '1':

    狀態1,

    break

case '2':

    狀態2,

    break

}


至此剩下一個問題是,case 0、1、2 過幾個月別人會看不懂,雖然本人通常會記得是怎麼

回事,所以這時候就要用 Eunm 把 case 變成英文:


eunm name {

OPEN:'OPEN'

'0.5X':'0.5X'

CLOSE:'CLOSE'

}


const [mode, setMode] = useState('OPEN')


React 的 useState,可以用 setMode 改變 mode 的值並重新渲染影響範圍。


change( ) => {

const nameArray = [name[OPEN], name[0.5X], name[CLOSE]]

const modeLength = nameArray.indexOf(mode)

( modeLength + 1 ) > nameArray.length ?

 setMode( nameArray[0] ) : 

 setMode(nameArray[modeLength + 1])

}

首先先做一個 enum 內容的陣列,然後找出現在狀態是第幾種,之後作一個沒事 length + 1 跳到

下一個狀態,到底則回到第一種( length = 0 )狀態的判斷。

雖然實際上的程式會變比較多行比較繞,但是在這裡可讀性的要求在節省行數之前。




參考資料:

神Q超人介紹的 Eunm