創科資訊全端工程師
國立彰化師範大學 資工系畢業
中央軟工所
前端及 React 愛好者,喜好參與社群交流
近期接觸 React Native 後,開始嘗試跨平台手機應用開發
喜歡前端經常迸出令人驚艷的潮潮東西,還有豐富活躍的社群文化
dmoon.t@gmail.com
JavaScript 需要管理比以往更多的 state
資料跟 View 的綁定
React component 的 state 彼此獨立
欲修改父 component 的state,需透過 props 傳遞 callback func
Dealing with data
將 state 集中管理
Redux 是 JavaScript 狀態容器
提供可預測化的狀態管理
唯一改變 state 的方法就是觸發 action (修改資料的申請動作)
對應不同的 action,使用純函數編寫 reducer 來執行 state 修改
整個應用的 state 存在一棵 object tree 中,並且放在唯一的 container (store) 內
客戶提出新需求
開規格
實際功能開發
release
View
( React )
Store
Action
Reducer
dispatch
畫面需要改變
=> 產生 Action
return
newState
資料變更
Server
request
PM
Engineer
Project
Product
response
事件的描述
const ADD_TODO = 'ADD_TODO';
// action
{
type: ADD_TODO, // required
text: 'Build my first Redux app',
}
產生 Action 的 pure func
const ADD_TODO = 'ADD_TODO';
// action creator
function requestAddTodo() {
return {
type: ADD_TODO,
text: 'Build my first Redux app',
};
}
// dispatch action
dispatch(requestAddTodo());
View
( React )
Store
Action
Reducer
dispatch
畫面需要改變
=> 產生 Action
return
newState
資料變更
Server
request
PM
Engineer
Project
Product
response
更新 State
function todos(state = [], action) {
switch (action.type) {
case ADD_TODO:
return [...state, {
text: action.text,
completed: false
}];
default:
return state;
}
}
store = {
todos: [{
text: 'todo1 title',
completed: false,
},{
text: 'todo2 title',
completed: true,
}],
}
View
( React )
Store
Action
Reducer
dispatch
畫面需要改變
=> 產生 Action
return
newState
資料變更
Server
request
PM
Engineer
Project
Product
response
存放共用 state 的容器
{
todos: [
{
text: 'todo1',
completed: true,
},
],
}
View
( React )
Store
Action
Reducer
dispatch
畫面需要改變
=> 產生 Action
return
newState
資料變更
Server
request
PM
Engineer
Project
Product
response
React 框架綁定
Provider
Connect
Connect
Component A
Component B
容器組件 | 展示組件 | |
---|---|---|
Location | 最頂層,路由處理 | 中間和子組件 |
Aware of Redux | 是 | 否 |
讀取數據 | 從 Redux 獲取 state | 從 props 獲取數據 |
修改數據 | 向 Redux 派發 actions | 從 props 調用回調函數 |
可以 dispatch thunk function
紀錄所有 Redux action 和下一次 state 的 log
可以 dispatch promise