2017-09-03 11 views
0

私はReact/Reduxアプリケーションで作業していますが、ユーザーアドレスを削除する必要があります。私はredux sagaをミドルウェアとして使用していますが、機能はうまくいきますが、 deleteAddressByBuyerIdAddressIdSuccess(saga.jsファイルで)、それだけでdeleteAddressByBuyerIdAddressIddeleteAddressByBuyerIdAddressIdFailureに入っている(Reduxの開発ツールで確認している)、いずれかがこの問題を整理するために私を助けることができる、redux saga deletting functionality

私のすべての機能とreduxデベロッパーツールのスクリーンショットは次のとおりです

アクションファイル

/* Delete an address for a buyer */ 
const deleteAddressByBuyerIdAddressId = 
    (buyerId: string, addressId: string, address: Object, params: string) => ({ 
     type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, 
     buyerId, 
     addressId, 
     address, 
     params, 
    }); 

const deleteAddressByBuyerIdAddressIdSuccess = 
    (buyerId: string, addressId: string, address: Object, params: string) => ({ 
     type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID_SUCCESS, 
     buyerId, 
     addressId, 
     address, 
     params, 
    }); 

const deleteAddressByBuyerIdAddressIdFailure = 
    (errorMessage: Object) => ({ 
     type: Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID_FAILURE, 
     errorMessage, 
    }); 

佐賀ファイル

/* Delete Buyers address */ 
function* deleteAddressByBuyerIdAddressId(action) { 
    try { 
     const response = yield call(
      api.account.deleteAddressByBuyerIdAddressId, 
      action.buyerId, 
      action.addressId, 
      action.address, 
      action.params 
     ); 
     if (response.ok && response.data && {}.hasOwnProperty.call(response.data, 'data')) { 
      yield put(
      Actions.deleteAddressByBuyerIdAddressIdSuccess(
       action.buyerId, 
       action.addressId, 
       response.data, 
       action.address, 
       action.params 
     ) 
    ); 
     } else { 
      yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(response.errorMessage)); 
     } 
    } catch (error) { 
     yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(error)); 
    } 
} 
function* watchDeleteAddressByBuyerIdAddressId(): Generator<void, void, void> { 
    yield takeLatest(Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, deleteAddressByBuyerIdAddressId); 
} 

レデューサー

export const deleteAddressByBuyerIdAddressId = (state: Object = INITIAL_STATE) => ({ 
    ...state, 
    isLoading: true, 
    successMessage: null, 
    errorMessage: null, 
}); 

export const deleteAddressByBuyerIdAddressIdSuccess = (state: Object = INITIAL_STATE, action: Object) => { 
    const successMessage = I18n.getText('account.address-deleted', {}, 'Address deleted!'); 
    return { 
     ...state, 
     address: action.address, 
     successMessage: successMessage, 
     } 
}; 

export const deleteAddressByBuyerIdAddressIdFailure = (state: Object = INITIAL_STATE, action: Object) => ({ 
    ...state, 
    errorMessage: action.errorMessage, 
    isLoading: false, 
}); 

Reduxの開発ツールは、あなたがそのif, else一部を必要としない

enter image description here


+0

あなたのプログラムはキャッチされているのでしょうか、それとも他に進んでいますか? –

+2

はい、私のプログラムはcatchまたはelseブロックに入っています。なぜなら、ユーザアドレスを削除したあとに応答がnullであるからです。これは事前に感謝してくれますか? – wali

+2

'null'応答が返ってきたら'call'関数の問題になります。 –

答えて

1

表示します。代わりに、リクエストが成功した場合は、ブロック自体の中で成功アクションを呼び出してください。tryさもなければあなたのcatchブロックの中で失敗アクションを呼び出します。それはあなたのために仕事をするでしょう。ここにサンプルコードがあります。

/* Delete Buyers address */ 
function* deleteAddressByBuyerIdAddressId(action) { 
    try { 
     const response = yield call(
      api.account.deleteAddressByBuyerIdAddressId, 
      action.buyerId, 
      action.addressId, 
      action.address, 
      action.params 
     ); 
      yield put(
      Actions.deleteAddressByBuyerIdAddressIdSuccess(
       action.buyerId, 
       action.addressId, 
       response.data, 
       action.address, 
       action.params 
     ) 
    ); 
    } catch (error) { 
     yield put(Actions.deleteAddressByBuyerIdAddressIdFailure(error)); 
    } 
} 
function* watchDeleteAddressByBuyerIdAddressId(): Generator<void, void, void> { 
    yield takeLatest(Types.DELETE_ADDRESS_BY_BUYER_ID_ADDRESS_ID, deleteAddressByBuyerIdAddressId); 
}