# React 入門 - 學習筆記 ###### tags: `React` `JavaScript` ## 建立本地開發環境 ### 方法一: CDN 連結 ```javascript <script crossorigin src="https://unpkg.com/react@18/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script> ``` >以上的版本只適用於開發環境,並不適合用於線上環境。你可以在以下找到已壓縮和最佳化的 React 線上版本: ```javascript <script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script> ``` #### 如何撰寫 ```javascript <!-- 步驟一 加入 React、Babel --> <script crossorigin src="https://unpkg.com/react@18/umd/react.production.min.js"></script> <script crossorigin src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script> <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> <!-- 步驟二 加入 root 元素 --> <div id="root"></div> <script type="text/babel"> // 步驟三 建立 React 元件,定義元件首個字母要大寫 function App(){ return <h1>Hello World!</h1> } // 步驟四 渲染元件到根元件上 const el = document.getElementById('root'); const root = ReactDOM.createRoot(el); root.render(<App />); </script> ``` ### 方法二: 使用 Create React App Create React App 是一個適合學習 React 的環境,而且也是使用 React 建立一個全新的 single-page 應用程式的最佳方法。 >1. 確認你有安裝一個較新的版本的 Node.js。(>=14.0.0) >2. 確認你有安裝一個較新的版本的 npm。(>=5.6) 打開 cmd 切換到想放專案的位置,輸入以下程式碼,就能建立一個新專案。 ``` npx create-react-app my-app ``` :::warning 1. npx 不是拼寫錯誤,它是一個 npm 5.2+ 附帶的 package 執行器。 2. my-app 可以更換成自己的專案名稱。 ::: 當你準備好發佈到線上環境,執行 ```npm run build``` 會在 build 文件夾裡建立一個你的應用程式的最佳化版本。 ## 執行專案 在你的專案資料夾執行```npm start```瀏覽器會自動開啟 ```http://localhost:3000``` 的預設 port。 ### 專案架構 * **node_modules :** 專案所需的模組套件都會存放在此資料夾中,存放了npm下載的外部模組套件, 這些套件的版本等資訊都記錄在資料夾中 package.json 裡面。 * **public :** 放置 index.html 、 網頁設定...等靜態檔案。 * **src :** 專案中的主要檔案都會放在這個資料夾中。 * **package.json :** 紀錄了專案名稱、版本資訊、 外部套件等相關訊息。 ## JSX 介紹 ### 快速嘗試 JSX 在你的專案中,嘗試 JSX 最快的方法就是將這個 Babel 的 ```<script>``` 標籤加入你的網頁上: ```javascript <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script> ``` 現在你就可以在任何 ```<script>``` 標籤裡使用 JSX,方法就是為它們加上 type="text/babel" 如下: ```javascript <script type="text/babel"><script/> ``` ### 在 JSX 中嵌入 expression表達式 ```javascript const name = 'Bruce'; const element = <h1>Hello, {name}</h1>; ``` 你可以在 JSX 的大括號中寫入任何合法的JavaScript 表達式。 :::info >**表達式與陳述式** >陳述式: `var a = 1;` 、 `if...else` 、 `function fn(){}` >表達式: `a = 2;` 、 `true && true` 、 `const fn = function(){}` >表達式一定會回傳結果。 ::: :::warning JSX 最外層只能有一個根元素,有多層元素時建議用使用()。style 必須使用物件形式。 ```javascript fuction App(){ return ( <> <h1 style={{color: 'blue'}}>Hello</h1> <p>World</p> </> ) } ``` ::: ### JSX 是如何運作的 Babel 將 JSX 編譯為呼叫 React.createElement() 的程式。 ```javascript const element = ( <h1 className="greeting"> Hello, World! </h1> ); ``` ```javascript const element = React.createElement( 'h1', {className: 'greeting'}, 'Hello, World!' ); // 標籤、HTML 屬性、內容 ``` :::warning 由於 JSX 比較接近 JavaScript 而不是 HTML,React DOM 使用 camelCase(駝峰式命名) 來命名屬性而不是使用慣有的 HTML 屬性名稱。 ::: ### JSX 與 HTML 的標籤屬性 * **className** ```javascript <div><button type="button" className="btn btn-primary">Primary</button></div> ``` * **checked** ```javascript <div><input type="checkbox" defaultChecked /></div> ``` * **value** ```javascript <div><input type="text" defaultValue="預設值!" /></div> ``` * **label for** ```javascript <div> <label htmlFor="email">輸入 Email</label> <input type="email" id="email" /> </div> ``` * **selected** ```javascript <div> <select name="" id="" defaultValue="2"/> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </div> ``` * **textarea** ```javascript <div> <textarea name="" id="" cols="30" rows="5" defaultValue="預設文字" /> </div> ```