2017-08-17 60 views
0

在這裏使用React-redux並且有一些問題,有些人可能會提供幫助。Reducer沒有返回預期的空對象

用戶可以創建「作業」(帖子)並將其刪除。添加它們不成問題,減速器返回預期的結果。但是,一旦從(firebase)數據庫中刪除作業,我會觸發當前作業的新提取,但還原器仍會返回舊作業。我錯過了什麼嗎?

之前刪除,這是工作對象的樣子:

activeJobs= { 
    -KrkPPy4ibSraKG-O49S: { 
    title: 'Help', 
    location: 'etc, 
    ... 
    }, 
    -KrkPPy4ibSraKG-O49S: { 
    title: 'Help', 
    location: 'etc, 
    ... 
    } and so on 
} 

當我將它們全部刪除我得到這個{}從服務器返回。預期。 什麼不是預期的是我的減速器仍然返回舊作業,我的組件不會重新呈現。

我派遣一個動作抓取作業後:

firebase.database().ref(`/jobs/activeJobs/${currentUser.uid}`) 
     .on('value', snapshot => { 

     console.log('new activeJobs ===', snapshot.val()); 

     dispatch({ 
      type: FETCH_JOBS_SUCCESS, 
      payload: snapshot.val() 
     }); 
     }); 

snapshot.val()不包含新的更新工作。

當年這裏是處理操作的減速機:

switch (action.type) { 
case FETCH_JOBS_SUCCESS: 

    // ...state contains the OLD jobs and action.payload contains {}. Why is is not overriding it the old jobs? 

    return { ...state, ...action.payload }; 
default: 
    return state; 
} 

爲什麼我減速失敗?

回答

2

{ ...state, ...action.payload }語法實際上意味着:通過利用state每一個道具和增加的action.payload每一個道具打造一個新的對象。在你的情況下,你只是得到一個類似於狀態的新對象,因爲...action.payload是一個空對象。

0

你的動作改爲

return Object.assign({}, state, {activeJobs : action.payload});