Jika Anda ingin memiliki konsep "kesalahan global", Anda dapat membuat errors
peredam, yang dapat mendengarkan tindakan addError, removeError, dll .... Kemudian, Anda dapat menghubungkan ke pohon status Redux Anda di state.errors
dan menampilkannya di mana saja sesuai.
Ada beberapa cara untuk mendekati ini, tetapi gagasan umumnya adalah bahwa kesalahan / pesan global akan membutuhkan peredamnya sendiri untuk hidup sepenuhnya terpisah dari <Clients />
/ <AppToolbar />
. Tentu saja jika salah satu dari komponen ini membutuhkan akses, errors
Anda dapat errors
menurunkannya sebagai penyangga di mana pun diperlukan.
Pembaruan: Contoh Kode
Berikut adalah salah satu contoh tampilan jika Anda meneruskan "kesalahan global" errors
ke tingkat teratas <App />
dan merendernya secara bersyarat (jika ada kesalahan). Menggunakan react-reduxconnect
untuk menghubungkan <App />
komponen Anda ke beberapa data.
// App.js
// Display "global errors" when they are present
function App({errors}) {
return (
<div>
{errors &&
<UserErrors errors={errors} />
}
<AppToolbar />
<Clients />
</div>
)
}
// Hook up App to be a container (react-redux)
export default connect(
state => ({
errors: state.errors,
})
)(App);
Dan sejauh menyangkut pencipta tindakan, itu akan mengirimkan ( redux-thunk ) kegagalan sukses sesuai dengan respons
export function fetchSomeResources() {
return dispatch => {
// Async action is starting...
dispatch({type: FETCH_RESOURCES});
someHttpClient.get('/resources')
// Async action succeeded...
.then(res => {
dispatch({type: FETCH_RESOURCES_SUCCESS, data: res.body});
})
// Async action failed...
.catch(err => {
// Dispatch specific "some resources failed" if needed...
dispatch({type: FETCH_RESOURCES_FAIL});
// Dispatch the generic "global errors" action
// This is what makes its way into state.errors
dispatch({type: ADD_ERROR, error: err});
});
};
}
Meskipun peredam Anda dapat dengan mudah mengelola serangkaian kesalahan, menambahkan / menghapus entri dengan tepat.
function errors(state = [], action) {
switch (action.type) {
case ADD_ERROR:
return state.concat([action.error]);
case REMOVE_ERROR:
return state.filter((error, i) => i !== action.index);
default:
return state;
}
}