2016-03-07 15 views
0

我目前正在學習Redux,並且遇到了麻煩,我的問題是爲什麼你需要在沒有它們的情況下應用程序工作的操作?他們添加了什麼?在Redux中,使用actionCreators有什麼好處?

import { createStore } from 'redux' 

// ACTIONS 
const addTodo = (text) => { 
    type: 'ADD_TODO', 
    text 
} 

const toggleTodo = (id) => { 
    type: 'TOGGLE_TODO', 
    id 
} 

// REDUCER 
const todos = (state = [], action) => { 
    switch(action.type) { 
    case 'ADD_TODO': 
     return [ 
     ...state, 
     { 
      id: state.length, 
      text: action.text, 
      complete: false 
     } 
     ] 
    default: 
     return state 
    } 
} 

// STORE 
const store = createStore(todos) 

// TEST 
store.dispatch({ type: 'ADD_TODO', text: 'Test' }) 
console.log(store.getState()) 
+0

您可以在反應組件和商店之間看到_「glue」_動作。 –

+0

你是指動作創造者嗎?正如你爲什麼需要addTodo當訊({類型:「Add_TODO」,文本:「測試」})的作品? –

回答

2

首先,不要ActionCreators操作之間感到困惑,他們是不同的東西。

操作只是用type財產(和其他任何你想添加)對象。

ActionCreators根據提供的邏輯和數據構建動作。 例如,假設一個動作「更新聯繫人」,那麼行動的創建者可能會被建爲異步流一個thunk,它會調度網絡請求API更新聯繫人,一旦知道API調用的工作,它調度動作,這可能是這樣的:

{ 
    type: "UPDATE_CONTACT", 
    data: { prop: "newValue" } 
} 

使用常量這是更大的代碼庫進行維護/調試方便。通過使用常量,您的環境將更快地標記拼寫錯誤的操作,因爲常量不存在。就像純粹依賴於對象文字或字符串一樣,調試可能會更復雜。

爲什麼用行動創造者

ActionCreators用於兩個主要目的:

便攜&可測性as per the redux docs

我還發現他們的動態構建最終的行動數據非常有用。按我上面的例子中,在那裏你會張貼接觸的情況下,服務器通常會與Location頭回應,給你接觸,你將需要爲未來的新位置(和可能ID)GET或PUT請求。使用actionCreator,我可以將這些新數據綁定到最終操作對象中,然後看起來像這樣:

{ 
    type: "CREATE_CONTACT", 
    data: { 
    first_name: "bob", 
    last_name: "builder" 
    id: 7   // -> provided by API, the actionCreator injected it 
    } 
} 
+0

我指的是動作創作者。 –

+0

編輯答案提供有關actionCreators的更多信息 –