Skip to content

Commit 14dc3b0

Browse files
committed
fix(learn): 清單 -> 列表
1 parent b68c912 commit 14dc3b0

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

src/content/learn/lifecycle-of-reactive-effects.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ button { margin-left: 10px; }
288288

289289
### React 如何得知需要重新同步 Effect {/*how-react-knows-that-it-needs-to-re-synchronize-the-effect*/}
290290

291-
你可能在想 React 是怎麼知道 Effect 在 `roomId` 改變後,需要重新同步。這是因為 *你告訴 React* 它的程式碼依賴 `roomId`,藉由[依賴的清單](/learn/synchronizing-with-effects#step-2-specify-the-effect-dependencies):
291+
你可能在想 React 是怎麼知道 Effect 在 `roomId` 改變後,需要重新同步。這是因為 *你告訴 React* 它的程式碼依賴 `roomId`,藉由[依賴的列表](/learn/synchronizing-with-effects#step-2-specify-the-effect-dependencies):
292292

293293
```js {1,3,8}
294294
function ChatRoom({ roomId }) { // roomId prop 可能隨著時間改變
@@ -551,7 +551,7 @@ button { margin-left: 10px; }
551551

552552
### 元件主體中所有宣告的變數都是響應式的 {/*all-variables-declared-in-the-component-body-are-reactive*/}
553553

554-
Props 和狀態不是唯一的響應式數值,以這兩者計算而來的值也是響應式的。當 props 和狀態改變,元件會重渲染,計算而來的值也會跟著改變。這也是為什麼元件主體中,被 Effect 用到的所有數值都應該包含在依賴的清單中
554+
Props 和狀態不是唯一的響應式數值,以這兩者計算而來的值也是響應式的。當 props 和狀態改變,元件會重渲染,計算而來的值也會跟著改變。這也是為什麼元件主體中,被 Effect 用到的所有數值都應該包含在依賴的列表中
555555

556556
使用者能從下拉式選單選擇一個聊天伺服器,但他們也可以在設置中設定一個預設伺服器。假設你已經將這些設定的狀態放進一個 [Context](/learn/scaling-up-with-reducer-and-context),所以你能從 Context 讀取 `settings`。現在你需要根據 props 中所選的伺服器和預設伺服器,來計算 `serverUrl`
557557

@@ -688,7 +688,7 @@ function ChatRoom({ roomId }) { // roomId 是響應式的
688688

689689
<Note>
690690

691-
在某些狀況下,React *知道* 某些值即使宣告在元件內,也從來不會改變。例如,`useState` 所回傳的 [`set` 函式](/reference/react/useState#setstate),以及 [`useRef`](/reference/react/useRef) 所回傳的 ref 物件是 *穩定的(stable)*——它們保證不會在重渲染中改變。穩定的值不是響應式的,所以可以從依賴清單中省略。這些值被允許包含在依賴中:因為它們不會改變,所以沒有差別。
691+
在某些狀況下,React *知道* 某些值即使宣告在元件內,也從來不會改變。例如,`useState` 所回傳的 [`set` 函式](/reference/react/useState#setstate),以及 [`useRef`](/reference/react/useRef) 所回傳的 ref 物件是 *穩定的(stable)*——它們保證不會在重渲染中改變。穩定的值不是響應式的,所以可以從依賴列表中省略。這些值被允許包含在依賴中:因為它們不會改變,所以沒有差別。
692692

693693
</Note>
694694

@@ -1112,7 +1112,7 @@ body {
11121112

11131113
</Sandpack>
11141114

1115-
在這兩個案例中,`canMove` 都是可以在 Effect 中讀取的響應式數值。這就是為什麼它必須在 Effect 的依賴清單中被指定。這確保 Effect 會在每次這個值改變時重新同步。
1115+
在這兩個案例中,`canMove` 都是可以在 Effect 中讀取的響應式數值。這就是為什麼它必須在 Effect 的依賴列表中被指定。這確保 Effect 會在每次這個值改變時重新同步。
11161116

11171117
</Solution>
11181118

@@ -1422,7 +1422,7 @@ label { display: block; margin-bottom: 10px; }
14221422

14231423
<Solution>
14241424

1425-
如果移除掉 linter 的抑制,就會看到一個 lint 錯誤。問題出在 `createConnection` 是 prop,因此它是響應式數值。它會隨著時間改變!(確實,它應該改變——像是使用者點選核取方塊時,父元件傳入不同的值給 `createConnection` prop。)這就是為什麼它應該是依賴。將它納入依賴清單來修正這個 bug:
1425+
如果移除掉 linter 的抑制,就會看到一個 lint 錯誤。問題出在 `createConnection` 是 prop,因此它是響應式數值。它會隨著時間改變!(確實,它應該改變——像是使用者點選核取方塊時,父元件傳入不同的值給 `createConnection` prop。)這就是為什麼它應該是依賴。將它納入依賴列表來修正這個 bug:
14261426

14271427
<Sandpack>
14281428

@@ -1622,7 +1622,7 @@ label { display: block; margin-bottom: 10px; }
16221622
16231623
來看看第一個選單是怎麼運作的。它將 `"/planets"` API 呼叫結果填到 `planetList` 狀態中。現在所選的行星 ID 被保存在 `planetId` 狀態變數裡。你需要找到某個地方來新增額外的程式碼,將 `"/planets/" + planetId + "/places"` API 呼叫的結果填到 `placeList` 狀態變數中。
16241624
1625-
如果你的實作正確,選擇行星時應該會填滿地點清單。改變行星時,也應該會改變地點清單
1625+
如果你的實作正確,選擇行星時應該會填滿地點列表。改變行星時,也應該會改變地點列表
16261626
16271627
<Hint>
16281628
@@ -1647,7 +1647,7 @@ export default function Page() {
16471647
let ignore = false;
16481648
fetchData('/planets').then(result => {
16491649
if (!ignore) {
1650-
console.log('取得行星清單');
1650+
console.log('取得行星列表');
16511651
setPlanetList(result);
16521652
setPlanetId(result[0].id); // 選擇第一個行星
16531653
}
@@ -1774,8 +1774,8 @@ label { display: block; margin-bottom: 10px; }
17741774
17751775
這裡有兩個獨立的同步程序:
17761776
1777-
- 第一個選單跟遠端的行星清單同步
1778-
- 第二個選單跟遠端的地點清單同步,而地點清單是根據當前的 `planetId`
1777+
- 第一個選單跟遠端的行星列表同步
1778+
- 第二個選單跟遠端的地點列表同步,而地點列表是根據當前的 `planetId`
17791779
17801780
這也是為什麼將它們描述成兩個分別的 Effect 是合理的。你可以照下方的範例來做做看:
17811781
@@ -1796,7 +1796,7 @@ export default function Page() {
17961796
let ignore = false;
17971797
fetchData('/planets').then(result => {
17981798
if (!ignore) {
1799-
console.log('取得行星清單');
1799+
console.log('取得行星列表');
18001800
setPlanetList(result);
18011801
setPlanetId(result[0].id); // 選擇第一個行星
18021802
}
@@ -1808,14 +1808,14 @@ export default function Page() {
18081808

18091809
useEffect(() => {
18101810
if (planetId === '') {
1811-
// 第一個清單尚未選取任何東西
1811+
// 第一個列表尚未選取任何東西
18121812
return;
18131813
}
18141814

18151815
let ignore = false;
18161816
fetchData('/planets/' + planetId + '/places').then(result => {
18171817
if (!ignore) {
1818-
console.log('取得 "' + planetId + '" 的地點清單');
1818+
console.log('取得 "' + planetId + '" 的地點列表');
18191819
setPlaceList(result);
18201820
setPlaceId(result[0].id); // 選擇第一個地點
18211821
}
@@ -1938,7 +1938,7 @@ label { display: block; margin-bottom: 10px; }
19381938
19391939
</Sandpack>
19401940
1941-
這些程式碼有一點重複。不過,這不是將它們合併成單一個 Effect 的好理由!如果你這麼做,你就必須合併兩個 Effect 的依賴,然後只要改變行星就會重新取得所有行星的清單。Effect 不是用來覆用程式碼的工具。
1941+
這些程式碼有一點重複。不過,這不是將它們合併成單一個 Effect 的好理由!如果你這麼做,你就必須合併兩個 Effect 的依賴,然後只要改變行星就會重新取得所有行星的列表。Effect 不是用來覆用程式碼的工具。
19421942
19431943
作為代替,要減少重複,你可以抽出一些邏輯到客製化的 Hook,像是下面的 `useSelectOptions`
19441944

0 commit comments

Comments
 (0)