2016-11-21 24 views
0

重要的是要我應該通過組件還是thunk中間件獲取狀態數據嗎?反應終極版

說不要在減速

因此,更多的行動創造者少,我應該:

  1. 通行證通過組件當前狀態的數據?

    this.props.fileActions.addFile(Object.keys(this.props.fileById).length)

  2. 或者獲得通過終極版,thunk的行動創造者的內部狀態數據?

    export const addFile(){ return (dispatch, getState) =>{ const filelength = Object.keys(getState().fileById).length; dispatch(addFileAction(filelength)) } }

附:我來自Angular世界,在大多數時間我在Services中存儲數據,調用Service.addFile()並且files.length已經存儲在服務中,導致不需要傳遞Service.addFile(files.length)

+0

我認爲無論哪種方式都可以,而且還有其他的選擇。你能詳細說明你想達到的目標嗎? – ArneHugo

+0

比方說,我有一個文件ID [1,2,3]的數組,文件{1:{id:1 ...} ...}的資源圖。當我添加一個文件時,它的名字是''File $ {fileCount}'',就像''File 4''一樣。 我習慣於保持組件變得越來越細,通過組件傳遞數據對我來說看起來並不明顯。使用redux thunk看起來很奇怪,因爲從角度來看,我會在reducer中做這件事,因爲它有關於它的狀態的信息,但它被styleguides禁止,我不能在reducer中做任何異步操作。 – user3468806

+0

@ArneHugo 我試圖變換角進行反應| Redux的 '出口類的FileService { addFile(){ 常量長度= Object.keys(this.fileById)。長度 const的文件= {名:「文件'+ length} } }' – user3468806

回答

0

喜歡後者的用法。

從組件向行爲創建者傳遞參數會使組件與數據耦合,並且意味着您可能無法重用此組件。

0

爲您的使用情況好像你應該做的是,在減速

function addNewFile() { 
    return { 
    type: 'ADD_NEW_FILE' 
    } 
} 

function filesReducer(state, action) { 
    if(action.type === 'ADD_NEW_FILE') { 
    const newId = state.filesById + 1; 
    return { 
     filesById: state.filesById.concat(newId), 
     entities: Object.assign({}, state.entities, { 
     [newId]: {name: `File ${newId}`} 
     }) 
    }; 
    } 
    // some other action handlers 
    return state; 
} 

你將會在一些行動來修改狀態。這正是減速器應該做的。

相關問題