iT邦幫忙

2023 iThome 鐵人賽

DAY 0
0
自我挑戰組

從零到全端:轉職者的 To-Do List 技能之旅系列 第 14

從零到全端:轉職者的 To-Do List 技能之旅-前端開發-React-1

  • 分享至 

  • xImage
  •  

今日目標:

了解 React 的特點

中秋節休息了兩天差點就不想寫了讓我更有動力了,為了有更多的時間做每周任務與專題,會縮小每日目標範圍。
讓我們趕快繼續這趟旅程吧!/images/emoticon/emoticon07.gif

了解 React 的特點

Imperative (命令式) vs Declarative (宣告式)

  • Imperative (命令式):過去前端開發多使用命令式方式操作 DOM,即一個指令對應一個動作。這種方法著重於「怎麼做」,但在複雜的用戶界面和多變的狀態下,維護變得相對複雜和耗力。
  • Declarative (宣告式):React 採用宣告式方法,我們只需描述「做什麼」,具體的執行過程則由 React 負責。
    • 舉個例子,我們來看一下變換顏色的情況。給定三個 li 元素,當點擊其中一個時,該元素變為紅色,其餘保持黑色。
      # JS imperative (命令式)
      <ul>
          <li class="item">Item 1</li>
          <li class="item">Item 2</li>
          <li class="item">Item 3</li>
      </ul>
      
      document.querySelectorAll('.item').forEach(function(item) {
          item.addEventListener('click', function() {
              // 先將所有的顏色設置為黑色
              document.querySelectorAll('.item').forEach(function(li) {
                  li.style.color = 'black';
              });
      
              // 將被點擊的 li 顏色設置為紅色
              item.style.color = 'red';
          });
      });
      
      # React declarative (宣告式)
      import { useState } from 'react';
      
      function MyComponent() {
          const [clickedIndex, setClickedIndex] = useState(null);
      
          const items = ['Item 1', 'Item 2', 'Item 3'];
      
          return (
              <ul>
                  {items.map((item, index) => (
                      <li // 因為可能修改順序,所以官網建議不要用 index 當 key,但舉例就從簡
                          key={index} 
                          onClick={() => setClickedIndex(index)}
                          style={{ color: clickedIndex === index ? 'red' : 'black' }}
                      >
                          {item}
                      </li>
                  ))}
              </ul>
          );
      }
      
    • 從例子中我們可以看到,在 React 的狀態變更下,我們無需明確指定要變更的項目,而原生 JS 則需要明確的操作步驟。同時,React 也只會更新狀態改變的元件,這點會連接到 React 的另一個特點:Virtual DOM

Virtual DOM

  • Virtual DOM:一種虛擬的 DOM 元素技術。React 通過將 component 轉換為 Virtual DOM 物件,接著再將其轉換為真實的 DOM,最終渲染到畫面上。重點在於,當 Virtual DOM 經歷變化時,React 會鑑別並且僅重新渲染那些發生變動的實際 DOM,由此優化性能。
    考慮先前的例子。如果使用原生 JS 的寫法,我們可能需要遍歷整個 ul(雖然也可以設立一個變數來追蹤前一個變為紅色的元素,但這就變得更複雜了)。然而在 React 中,只有兩個發生變動的元件會被更新。

回顧

今天,我們一起走過了 React 的兩大核心特點之旅 - 宣告式設計和 Virtual DOM。
宣告式的風格讓我們在開發時能夠更集中注意力在應用的狀態和交互上,而 Virtual DOM 則在默默地提升著我們應用的效能和用戶的使用體驗。

當然 React 的強大遠不止於此!在接下來的時間裡,讓我們一邊實作,一邊探索吧!🚀
/images/emoticon/emoticon18.gif


上一篇
從零到全端:轉職者的 To-Do List 技能之旅-後端開發- Member API - 4
下一篇
從零到全端:轉職者的 To-Do List 技能之旅-前端開發-React-2
系列文
從零到全端:轉職者的 To-Do List 技能之旅15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言