私のアプリケーションにどのようにしたいかを動作させるのに問題があります。私はReactとReduxにはかなり新しいので、私に同行してください。AxiosとReduxでエラー状態を追加する
今すぐ私はthis.props.fetchData('usernamehere')
と呼んでユーザーに関するデータを取得できます。成功するとReactコンポーネントの更新に使用するthis.props.profile
が更新されます。この問題は、エラーを処理することです。
私はFETCH_DATA_ERROR
減速を追加することによって、これを処理しようとしましたが、私がいる問題は、それは404のそれはまだちょうどthis.props.error
を更新するのではなく、空のオブジェクトでthis.props.profile
を置き換えたとき。理想的には、新しいプロファイルが見つかるまで現在のプロファイルを保存し、更新して入力したユーザー名でエラーが何であるかをユーザーに表示したいと考えています。this.props.error
誰もが、彼らは非常に高く評価されるだろう任意の提案を持っている場合
import { FETCH_DATA, FETCH_DATA_ERROR } from '../actions/types';
const INITIAL_STATE = { profile: null, error: null }
export default function(state = INITIAL_STATE, action) {
switch(action.type) {
case FETCH_DATA:
return { ...state, profile: action.payload.data };
case FETCH_DATA_ERROR:
return { ...state, error: action.payload };
default:
return state;
}
}
:
import axios from 'axios';
import { FETCH_DATA, FETCH_DATA_ERROR } from './types';
export const ROOT_URL = 'https://api.github.com/users'
export function fetchData(user) {
const request = axios.get(`${ROOT_URL}/${user}`)
.catch(function (error) {
return {
type: FETCH_DATA_ERROR,
payload: error
}
});
return {
type: FETCH_DATA,
payload: request
}
}
と減速:
は今の私は、次のアクションの作成者を設定しています。私は正しい道にいるように感じるが、どこが間違っているのか分からないようだ。
なぜ'{type:FETCH_DATA}'を 'then'に置かないでください。 –
@SamRadそれについても考えて、私は 'アクションは普通のオブジェクトでなければなりません。非同期アクションにはカスタムミドルウェアを使用してください。 ' –
それは本当です。 'redux-thunk'や他の儀式の罠を使わない限り、非同期の行動を取ることはできません。簡単な方法は、あなたのAPIコールを別々に書いて、あなたのアクションの作成者を 'then'と' catch'に呼ぶことです。それは理にかなっていますか? –