# Super Junior’s Club Day8 分享者:rich --- # 今日目標:來寫個網速單位轉換器吧! [Day09原文連結](https://ithelp.ithome.com.tw/articles/10220688) [Day10原文連結](https://ithelp.ithome.com.tw/articles/10221113) --- ![](https://i.imgur.com/YuQvUMP.png) --- ### 網速單位是什麼? >測測看你的速度[台大測速](http://speed5.ntu.edu.tw/speed5/) --- ![](https://i.imgur.com/1kHoFLx.png) --- 常見der: >MB/s:Million <font color="#f00">bytes</font> per second >的縮寫 >Mbps:Million <font color="#f00">bits</font> per second >的縮寫 兩者只差在單位不一樣! 所以縮寫會以 大寫 B 和 小寫 b 做區隔。 ### 結論:大寫的(資料量)就比較大。 --- ### byte bit 差在哪? >Bit = 位元:一個電流的開(1)或關(0),是電腦的最小、最基本單位。 >Byte = 位元組:是資料常用的基本單位,大小可以儲存一個英文字母。 >1 Byte = 8 bit --- ### 不太相關 || 補充 [Memory Usage Of Different Data Types in javascript](https://stackoverflow.com/questions/4905861/memory-usage-of-different-data-types-in-javascript) ![](https://i.imgur.com/xKWlkK5.png) [How many characters can you store with 1 byte?](https://stackoverflow.com/questions/21300929/how-many-characters-can-you-store-with-1-byte/21301130) --- # 複習單位大小 ### 1Byte=8Bit ### 1KB=1024Bytes ### 1MB=1024KB ### 1GB=1024MB ### 1TB=1024GB ### 1PB=1024TB --- ### 所以實際上 Mbps 的值需要「除以 8 」 ### 才是指每秒鐘可以有多少 MB 的傳輸量 Mbps/8 = MB --- ![](https://i.imgur.com/4Uglubs.png) --- ### 又要改成 JSX 了 [自己動手做](https://codepen.io/PJCHENder/pen/WNemOjp) --- ![](https://i.imgur.com/sYQ6z3b.png) --- ### 改完長[這樣](https://codepen.io/PJCHENder/pen/LYPaZvE) 有了樣子之後,要加上一些功能。 --- ## 最終但不是今日目標: ![](https://i.imgur.com/x8YFtPD.gif) --- * 輸入 Mbps 自動轉換成 MB/s * 根據輸入的數字不同,最下方會呈現不同的樣式和文字說明 --- # 拿到使用者輸入並顯示於畫面上之步驟 ![](https://i.imgur.com/5mFo0XA.png) ---- >在 React 中,常使用 handle 當作事件處理器的開頭,例如 onClick 對應到 handleClick,onChange 對應到 handleChange。 > --- 成功顯示後,再更改 `show` 那邊顯示的數值。 `value={inputValue/8}` 第一個目標完成了:輸入 Mbps 自動轉換成 MB/s --- ## 太多東西了,我要把它拆開 拆出 UnitControl, CardFooter --- 接著增加 CardFooter 的樣式 --- ``` const CardFooter = () => { // STEP 1:inputValue 是使用者輸入的數值,暫時先設成 30 let inputValue = 30; // STEP 2:定義 criteria 物件 let criteria; // STEP 3:根據 inputValue 改變要顯示的內容和背景色 if (!inputValue) { criteria = { title: '---', backgroundColor: '#d3d8e2', }; } else if (inputValue < 15) { criteria = { title: 'SLOW', backgroundColor: '#ee362d', }; } else if (inputValue < 40) { criteria = { title: 'GOOD', backgroundColor: '#1b82f1', }; } else if (inputValue >= 40) { criteria = { title: 'FAST', backgroundColor: '#13d569', }; } return ( <div className="card-footer" style={{ backgroundColor: criteria.backgroundColor }} > {criteria.title} </div> ); }; ``` --- 因為在 <CardFooter /> 中還沒辦法取得使用者實際上在對話框中輸入的 inputValue 因此還無法讓它自動根據使用者在對話框中輸入的值來自動變化。 未完成的部份下次待續~ --- # 謝謝大家~ ---
{"metaMigratedAt":"2023-06-16T08:13:21.151Z","metaMigratedFrom":"Content","title":"Super Junior’s Club Day8","breaks":true,"contributors":"[{\"id\":\"c0024f73-f514-44f8-b771-597027ddd0ec\",\"add\":2960,\"del\":202}]"}
    246 views