11---
2- title : 使用化簡器和 Context 擴充應用程式
2+ title : 使用 Reducer 和 Context 擴充應用程式
33---
44
55<Intro >
66
7- 化簡器(reducers) 可以整合元件的狀態更新邏輯。Context 能將資訊深入向下傳遞到其他的元件。你可以混用化簡器和 context 來管理複雜畫面的狀態。
7+ Reducers 可以整合元件的狀態更新邏輯。Context 能將資訊深入向下傳遞到其他的元件。你可以混用 reducer 和 context 來管理複雜畫面的狀態。
88
99</Intro >
1010
1111<YouWillLearn >
1212
13- * 如何混用化簡器和 context
13+ * 如何混用 reducer 和 context
1414* 如何避免藉由屬性(props)傳送狀態和派發 action
1515* 如何維持不同檔案中的 context 和狀態邏輯
1616
1717</YouWillLearn >
1818
19- ## 混用化簡器和 context {/* combining-a-reducer-with-context* /}
19+ ## 混用 reducer 和 context {/* combining-a-reducer-with-context* /}
2020
21- 在[ 介紹化簡器 ] ( /learn/extracting-state-logic-into-a-reducer ) 的例子中,狀態是由化簡器所管理。化簡器函式包含所有的狀態邏輯 ,並被宣告於檔案的下方:
21+ 在[ 介紹 reducer ] ( /learn/extracting-state-logic-into-a-reducer ) 的例子中,狀態是由 reducer 所管理。Reducer 函式包含所有的狀態邏輯 ,並被宣告於檔案的下方:
2222
2323<Sandpack >
2424
@@ -207,7 +207,7 @@ ul, li { margin: 0; padding: 0; }
207207
208208</Sandpack >
209209
210- 化簡器可以讓事件處理函式保持簡潔 。不過隨著應用程式成長,可能會遭遇另一種困境。** 現在 ` task ` 狀態和 ` dispatch ` 函式只在 ` TaskApp ` 元件的頂層才能使用。** 要讓其他元件讀取任務清單或改變任務,需要另外[ 向下傳遞] ( /learn/passing-props-to-a-component ) 當前狀態並讓事件處理函式作為屬性來改變任務。
210+ Reducer 可以讓事件處理函式保持簡潔 。不過隨著應用程式成長,可能會遭遇另一種困境。** 現在 ` task ` 狀態和 ` dispatch ` 函式只在 ` TaskApp ` 元件的頂層才能使用。** 要讓其他元件讀取任務清單或改變任務,需要另外[ 向下傳遞] ( /learn/passing-props-to-a-component ) 當前狀態並讓事件處理函式作為屬性來改變任務。
211211
212212舉例來說,` TaskApp ` 將一個任務清單和一些事件處理函式傳入 ` TaskList ` :
213213
@@ -234,7 +234,7 @@ ul, li { margin: 0; padding: 0; }
234234這就是為什麼,作為傳遞屬性的替代方案,你可能會想把 ` tasks ` 狀態和 ` dispatch ` 函式都[ 放進 context] ( /learn/passing-data-deeply-with-context ) 。
235235** 這樣一來,` TaskApp ` 樹底下的任何元件都能讀取到任務及派發 action,而不用重複「層層傳遞屬性(prop drilling)」。**
236236
237- 以下是混用化簡器和 context 的方法:
237+ 以下是混用 reducer 和 context 的方法:
238238
2392391 . ** 創建** context。
2402402 . 將狀態和派發函式 ** 放入** context。
@@ -902,7 +902,7 @@ ul, li { margin: 0; padding: 0; }
902902
903903## 將程式碼移到獨立的檔案 {/*moving-all-wiring-into-a-single-file*/}
904904
905- 雖然不一定要這麼做,但可以將化簡器和 context 移到獨立的檔案,以進一步整理這些元件。現在 ` TasksContext .js ` 只包含兩個 context 的宣告:
905+ 雖然不一定要這麼做,但可以將 reducer 和 context 移到獨立的檔案,以進一步整理這些元件。現在 ` TasksContext .js ` 只包含兩個 context 的宣告:
906906
907907` ` ` js
908908import { createContext } from ' react' ;
@@ -911,9 +911,9 @@ export const TasksContext = createContext(null);
911911export const TasksDispatchContext = createContext (null );
912912` ` `
913913
914- 這個檔案逐漸變得擁擠!你將會移動化簡器到同一個檔案 ,接著你會宣告一個新的 ` TasksProvider` 元件在同一個檔案裡。這個元件會將這些片段綁在一起:
914+ 這個檔案逐漸變得擁擠!你將會移動 reducer 到同一個檔案 ,接著你會宣告一個新的 ` TasksProvider` 元件在同一個檔案裡。這個元件會將這些片段綁在一起:
915915
916- 1. 元件會用化簡器管理狀態 。
916+ 1. 元件會用 reducer 管理狀態 。
9179172. 元件會提供兩個 context 給下面的這些元件。
9189183. 元件會[以 ` children` 作為屬性](/learn/passing-props-to-a-component#passing-jsx-as-children),因此你能傳入 JSX 給它。
919919
@@ -1141,7 +1141,7 @@ const tasks = useTasks();
11411141const dispatch = useTasksDispatch ();
11421142` ` `
11431143
1144- 這不會以任何方式改變行為,但會使之後進一步拆分這些 context 或增加一些函式中的邏輯。 **現在所有的 context 和化簡器串接都在 ` TaskContext .js ` 裡了。這能使元件保持乾淨及簡潔,並專注於要呈現的是什麼,而不是從何處獲取資料:**
1144+ 這不會以任何方式改變行為,但會使之後進一步拆分這些 context 或增加一些函式中的邏輯。 **現在所有的 context 和 reducer 串接都在 ` TaskContext .js ` 裡了。這能使元件保持乾淨及簡潔,並專注於要呈現的是什麼,而不是從何處獲取資料:**
11451145
11461146<Sandpack>
11471147
@@ -1349,18 +1349,18 @@ ul, li { margin: 0; padding: 0; }
13491349
13501350</Note>
13511351
1352- 隨著應用程式成長,你可能會有很多像這樣的 context 與化簡器的配對 。這是擴充應用程式的有效方式,且在需要從樹的深層取得資料時,不需要太多的工作,就能[抬升狀態](/learn/sharing-state-between-components)。
1352+ 隨著應用程式成長,你可能會有很多像這樣的 context 與 reducer 的配對 。這是擴充應用程式的有效方式,且在需要從樹的深層取得資料時,不需要太多的工作,就能[抬升狀態](/learn/sharing-state-between-components)。
13531353
13541354<Recap>
13551355
1356- - 可以混用化簡器和 context,讓任何元件讀取和更新元件上的狀態。
1356+ - 可以混用 reducer 和 context,讓任何元件讀取和更新元件上的狀態。
13571357- 想提供狀態和派發函式給下方的元件的話:
13581358 1. 創建兩個 context(給狀態和派發函式)。
1359- 2. 由使用化簡器的元件提供兩個 context。
1359+ 2. 由使用 reducer 的元件提供兩個 context。
13601360 3. 在需要讀取的元件中使用 context。
13611361- 可以將相關程式碼移動到獨立檔案,來進一步整理元件。
13621362 - 可以導出像是 ` TaskProvider` 這樣的元件來提供 context。
13631363 - 也可以導出像是 ` useTasks` 和 ` useTasksDispatch` 這樣的自定義 Hooks 來讀取 context。
1364- - 在應用中可以有許多像這樣的化簡器與 context 的配對。
1364+ - 在應用中可以有許多像這樣的 reducer 與 context 的配對。
13651365
13661366</Recap>
0 commit comments