1
1
---
2
2
id : components-and-props
3
- title : 元件與 Props
3
+ title : Components 與 Props
4
4
permalink : docs/components-and-props.html
5
5
redirect_from :
6
6
- " docs/reusable-components.html"
@@ -16,23 +16,23 @@ prev: rendering-elements.html
16
16
next : state-and-lifecycle.html
17
17
---
18
18
19
- 元件使你可以將 UI 拆分成獨立且可復用的程式碼,並且專注於各別程式碼的思考。本章節旨在介紹元件的相關概念 ,你也可以在此參閱[ 詳細的 API 文件] ( /docs/react-component.html ) 。
19
+ Component 使你可以將 UI 拆分成獨立且可復用的程式碼,並且專注於各別程式碼的思考。本章節旨在介紹 component 的相關概念 ,你也可以在此參閱[ 詳細的 API 文件] ( /docs/react-component.html ) 。
20
20
21
- 概念上來說,元件就像是 JavaScript 的函式,它接收任意的參數(稱之為 " props" )並且回傳描述畫面的 React 元素。
21
+ 概念上來說,component 就像是 JavaScript 的函式,它接收任意的參數(稱之為「 props」 )並且回傳描述畫面的 React 元素。
22
22
23
- ## 函式元件與類別元件 {#function-and-class-components}
23
+ ## Function Components 與 Class Components {#function-and-class-components}
24
24
25
- 定義元件最簡單的方法即是撰寫一個 Javascript 函式:
25
+ 定義 component 最簡單的方法即是撰寫一個 Javascript 函式:
26
26
27
27
``` js
28
28
function Welcome (props ) {
29
29
return < h1> Hello, {props .name }< / h1> ;
30
30
}
31
31
```
32
32
33
- 此函式是一個符合規範的 React 元件 ,因為它接受一個 " props" (指屬性 properties)物件並回傳一個 React 元素。我們稱之為函式元件( function components) ,因為它本身就是一個 JavaScript functions。
33
+ 此函式是一個符合規範的 React component ,因為它接受一個「 props」 (指屬性 properties)物件並回傳一個 React 元素。我們稱之為 function component ,因為它本身就是一個 JavaScript functions。
34
34
35
- 同樣的,你也可以使用 [ ES6 類別 ] ( https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes ) 來定義元件 :
35
+ 同樣的,你也可以使用 [ ES6 Class ] ( https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes ) 來定義 component :
36
36
37
37
``` js
38
38
class Welcome extends React .Component {
@@ -42,27 +42,27 @@ class Welcome extends React.Component {
42
42
}
43
43
```
44
44
45
- 上述兩種元件的在 React 中是同等的。
45
+ 上述兩種 component 的在 React 中是同等的。
46
46
47
- 我們將會在[ 下一個章節] ( (/docs/state-and-lifecycle.html) ) 探討 class 所擁有的額外特性,但在那之前,我們會使用函式元件來保持簡潔 。
47
+ 我們將會在[ 下一個章節] ( (/docs/state-and-lifecycle.html) ) 探討 class 所擁有的額外特性,但在那之前,我們會使用 function component 來保持簡潔 。
48
48
49
- ## 描繪一個元件 {#rendering-a-component}
49
+ ## Render 一個 component {#rendering-a-component}
50
50
51
51
在此之前,我們只見過這種相當於 DOM 標籤的 React 元素:
52
52
53
53
``` js
54
54
const element = < div / > ;
55
55
```
56
56
57
- 不過,React 元素也可以是使用者自定義的元件 :
57
+ 不過,React 元素也可以是使用者自定義的 component :
58
58
59
59
``` js
60
60
const element = < Welcome name= " Sara" / > ;
61
61
```
62
62
63
- 當 React 元素為使用者定義的元件時 ,它會將 JSX 所接收的屬性作為一個物件傳遞給元件 ,這一個物件被稱為 " props" 。
63
+ 當 React 元素為使用者定義的 component 時 ,它會將 JSX 所接收的屬性作為一個物件傳遞給 component ,這一個物件被稱為「 props」 。
64
64
65
- 舉例來說,這段程式碼會在頁面上繪製出 " Hello, Sara" :
65
+ 舉例來說,這段程式碼會在頁面上 render 出「 Hello, Sara」 :
66
66
67
67
``` js{1,5}
68
68
function Welcome(props) {
@@ -81,21 +81,21 @@ ReactDOM.render(
81
81
讓我們來複習一下這個例子發生了什麼事:
82
82
83
83
1 . 我們對 ` <Welcome name="Sara" /> ` 這個元素調用了 ` ReactDOM.render() ` 。
84
- 2 . React 以 ` {name: 'Sara'} ` 作為 props 傳入 ` Welcome ` 元件並呼叫 。
85
- 3 . ` Welcome ` 元件回傳了 ` <h1>Hello, Sara</h1> ` 元素作為返回值。
84
+ 2 . React 以 ` {name: 'Sara'} ` 作為 props 傳入 ` Welcome ` component 並呼叫 。
85
+ 3 . ` Welcome ` component 回傳了 ` <h1>Hello, Sara</h1> ` 元素作為返回值。
86
86
4 . React DOM 高效率的將 DOM 更新為 ` <h1>Hello, Sara</h1> ` 。
87
87
88
- > ** 注意:** 元件的字首須為大寫字母
88
+ > ** 注意:** Component 的字首須為大寫字母
89
89
>
90
- > React 會將小寫字母開頭的組件視為原始 DOM 標籤,舉例來說,` <div /> ` 就會被視為是 HTML 的 div 標籤,但是 ` <Welcome /> ` 則是一個元件 ,而且需要在作用域中使用 ` Welcome ` 。
90
+ > React 會將小寫字母開頭的組件視為原始 DOM 標籤,舉例來說,` <div /> ` 就會被視為是 HTML 的 div 標籤,但是 ` <Welcome /> ` 則是一個 component ,而且需要在作用域中使用 ` Welcome ` 。
91
91
>
92
- > 想要了解更多此約定背後的原因 ,請參閱 [ JSX In Depth] ( /docs/jsx-in-depth.html#user-defined-components-must-be-capitalized ) 章節。
92
+ > 想要了解更多關於此慣例的原因 ,請參閱 [ JSX In Depth] ( /docs/jsx-in-depth.html#user-defined-components-must-be-capitalized ) 章節。
93
93
94
- ## 組合元件 {#composing-components}
94
+ ## 組合 component {#composing-components}
95
95
96
- 元件可以在輸出中引用其他元件。我們可以在任何層次中抽象化相同的元件 ,按鈕、表單、對話框、甚至是整個畫面,在 React 應用程式中都將以元件的方式呈現 。
96
+ Component 可以在輸出中引用其他 component。我們可以在任何層次中抽象化相同的 component ,按鈕、表單、對話框、甚至是整個畫面,在 React 應用程式中都將以 component 的方式呈現 。
97
97
98
- 舉例來說,我們可以建立一個繪製多次 ` Welcome ` 的 ` App ` 元件 :
98
+ 舉例來說,我們可以建立一個 render 多次 ` Welcome ` 的 ` App ` component :
99
99
100
100
``` js{8-10}
101
101
function Welcome(props) {
@@ -120,9 +120,9 @@ ReactDOM.render(
120
120
121
121
[ 在 CodePen 上試試看吧!] ( codepen://components-and-props/composing-components )
122
122
123
- 通常來說,每個 React 應用程式都有一個最高層級的 ` App ` 元件 。然而,如果你將 React 結合至現存的應用程式中,你可能需要使用項 ` Button ` 這樣的小元件 ,並由下往上,逐步應用到畫面的最高層級。
123
+ 通常來說,每個 React 應用程式都有一個最高層級的 ` App ` component 。然而,如果你將 React 結合至現存的應用程式中,你可能需要使用像 ` Button ` 這樣的小型 component ,並由下往上,逐步應用到畫面的最高層級。
124
124
125
- ## 抽取元件 {#extracting-components}
125
+ ## 抽取 component {#extracting-components}
126
126
127
127
別害怕將 component 分成更小的 component。
128
128
@@ -154,9 +154,9 @@ function Comment(props) {
154
154
155
155
[ 在 CodePen 上試試看吧!] ( codepen://components-and-props/extracting-components )
156
156
157
- 它接受 ` author ` (一個物件)、` text ` (一個字串)、還有 ` date ` (一個日期) 作為它的 props。它的作用是在一個社交網站上繪製一個 comment 。
157
+ 它接受 ` author ` (一個物件)、` text ` (一個字串)、還有 ` date ` (一個日期) 作為它的 props。它的作用是在一個社交網站上 render 一則評論 。
158
158
159
- 這個元件可能因為太多的巢狀關係而難以更動 ,而且也難以復用獨立的部分。讓我們把一些元件從中分離吧 。
159
+ 這個 component 可能因為太多的巢狀關係而難以更動 ,而且也難以復用獨立的部分。讓我們把一些 component 從中分離吧 。
160
160
161
161
首先, 我們將 ` Avatar ` 分離出來:
162
162
@@ -171,9 +171,9 @@ function Avatar(props) {
171
171
}
172
172
```
173
173
174
- 這個 ` Avatar ` 並不需知道他會被繪製在 ` Comment ` 中。這是為什麼我們給他一個更為一般的名字: ` user ` 而不是 ` author ` .
174
+ 這個 ` Avatar ` 並不需知道他會被 render 在 ` Comment ` 中。這是為什麼我們給他一個更為一般的名字: ` user ` 而不是 ` author ` .
175
175
176
- 我們建議從元件的角度為 props 命名,而不是它的使用情境。
176
+ 我們建議從 component 的角度為 props 命名,而不是它的使用情境。
177
177
178
178
現在我們可以稍微簡化 ` Comment ` :
179
179
@@ -198,7 +198,7 @@ function Comment(props) {
198
198
}
199
199
```
200
200
201
- 接下來,我們將 ` UserInfo ` 元件也分離出來,它會在使用者名稱旁邊繪製 ` Avatar ` 元件 :
201
+ 接下來,我們將 ` UserInfo ` component 也分離出來,它會在使用者名稱旁邊 render ` Avatar ` component :
202
202
203
203
``` js{3-8}
204
204
function UserInfo(props) {
@@ -233,11 +233,11 @@ function Comment(props) {
233
233
234
234
[ 在 CodePen 上試試看吧!] ( codepen://components-and-props/extracting-components-continued )
235
235
236
- 在一開始,將元件分離出來可能是一件繁重的工作 ,但是在較大的應用程式中,建構可復用的元件是非常值得 。以經驗來說,如果一個 UI 中有一部分會被重複使用很多次(` Button ` 、` Panel ` 、` Avatar ` ),或者它足夠複雜到自成一個元件 (` App ` 、` FeedStory ` 、` Comment ` ),那它就適合被抽出作為一個可復用的元件 。
236
+ 在一開始,將 component 分離出來可能是一件繁重的工作 ,但是在較大的應用程式中,建構可復用的 component 是非常值得 。以經驗來說,如果一個 UI 中有一部分會被重複使用很多次(` Button ` 、` Panel ` 、` Avatar ` ),或者它足夠複雜到自成一個 component (` App ` 、` FeedStory ` 、` Comment ` ),那它就適合被抽出作為一個可復用的 component 。
237
237
238
238
## Props 的唯獨性 {#props-are-read-only}
239
239
240
- 不管你使用[ 函式或是類別來宣告元件 ] ( #function-and-class-components ) ,都絕不能修改自己的props 。例如這個 sum 函式:
240
+ 不管你使用[ 函式或是 Class 來宣告 component ] ( #function-and-class-components ) ,都絕不能修改自己的 props 。例如這個 sum 函式:
241
241
242
242
``` js
243
243
function sum (a , b ) {
@@ -257,6 +257,6 @@ function withdraw(account, amount) {
257
257
258
258
React 是很彈性的,但有一條嚴格的規定:
259
259
260
- ** 所有的 React 元件都必須像純函數函式一般保護他的 props**
260
+ ** 所有的 React component 都必須像純函數函式一般保護他的 props**
261
261
262
- 當然,應用程式的 UI 是動態的,而且總是隨著時間改變。在[ 下個章節] ( /docs/state-and-lifecycle.html ) ,我們會介紹一個新的概念 " state" 。State 可以在不違反上述規則的前提下,讓 React 元件隨使用者操作 、網路回應、或是其他方式改變輸出內容。
262
+ 當然,應用程式的 UI 是動態的,而且總是隨著時間改變。在[ 下個章節] ( /docs/state-and-lifecycle.html ) ,我們會介紹一個新的概念「 state」 。State 可以在不違反上述規則的前提下,讓 React component 隨使用者操作 、網路回應、或是其他方式改變輸出內容。
0 commit comments