したがって、リクエストにaxiosを使用し、アクションをディスパッチするためにredux-thunkを使用する、この単純な非同期リクエスト アクション クリエーターがあります。異なるリクエストに対して同じアクション クリエーターを再利用したいので、各リクエストには独自の状態があります。いくつかのコードを示してから、さらに説明します。これが私のアクション作成者です
function responseOK(response){
return {
type: RESPONSE_OK,
payload: response,
}
}
function loadingChangedStatus(isLoading) {
return {
type: IS_LOADING,
isLoading: isLoading,
}
}
function handleError(errorID){
return {
type: HANDLE_ERROR,
errorID: errorID,
}
}
export function makeRequest( URL){
return function(dispatch, getSate){
dispatch( loadingChangedStatus(true) );
axios.get( URL )
.then(function(response){
dispatch(loadingChangedStatus(false));
dispatch(responseOK(response));
})
.catch(function (response) {
dispatch(loadingChangedStatus(false));
dispatch(handleError('connection_error'));
});
}
}
そして、私のレデューサーreducerRequest :
export default function(state = {isLoading:false, payload:false,errorID:false}, action){
switch (action.type) {
case IS_LOADING:
return Object.assign({}, state, {
isLoading: action.isLoading,
});
break;
case RESPONSE_OK:
return Object.assign({}, state, {
isLoading: state.isLoading,
payload: action.payload,
});
break;
case HANDLE_ERROR:
return Object.assign({}, state, {
isLoading: state.isLoading,
payload: action.payload,
errorID:action.errorID,
});
break;
default:
return state;
}
}
ここから問題が始まります
レデューサーを次のように組み合わせます。
import { combineReducers } from 'redux';
import Request from "./reducerRequest";
const rootReducer = combineReducers({
// I WANT EACH OF THESE TO BE SEPARATE INSTANCE BUT USE THE SAME ACTION CREATOR / REDUCER
defaults: Request,
updates: Request,
});
export default rootReducer;
私のコンポーネントでは:
function mapStateToProps( {defaults, updates} ){
return {defaults, updates}
}
function mapDispatchToProps( dispatch ){
return bindActionCreators({ makeRequest}, dispatch);
}
問題: アクション クリエーターをさまざまなリクエストに再利用したいと考えています。どうやって
- 呼び出し
makeRequest('www.defaults.com')
、それはで終わるdefaults
- 呼び出し
makeRequest('www.updates.com')
、それはで終わるupdates
これを解決するために想像できる唯一の方法は、すべてのリクエストに対して独自のアクションクリエーターと独自のリデューサーを作成することです-たくさんのコピーペーストだけです-それは正しくありません。
アクションクリエーターとリデューサーを再利用して、コンポーネント内にdefaults
との 2 つの個別のインスタンスを作成するにはどうすればよいですか?updates