3
私は非同期アクション非同期アクションを正しく処理する方法は?
function fetch(url) {
dispatch => {
request(url).then(
resp => dispatch({type: FETCH_SUCCESS, resp}),
error => dispatch({type: FETCH_FALUIRE, error})
);
} }
UIを持っているが、それらのいずれかをクリックし、それはその項目のURLとアクションを送出したときに、すべての項目を一覧表示するページがあります。
最初にitem1をクリックすると、item2の応答がitem1より早く返された場合、item2をすばやくクリックします。ストア内のitem2のデータはitem1によって上書きされます。
fetch('http://remote/items/item1'); //first
fetch('http://remote/items/item2'); // then
アイテム1の結果はどうやって無視できますか?またはアイテムの発送をアイテム1の後に常にトリガーできるようにするにはどうすればいいですか?
私が考えることができるものは、リクエストを送る前にURLを発送してください。
function fetch(url) {
dispatch => {
dispatch({type: FETCH_START, url});
request(url).then(
resp => dispatch({type: FETCH_SUCCESS, resp, url}),
error => dispatch({type: FETCH_FALUIRE, error, url})
);
}
}
還元剤では、私は応答を無視すべきかどうかを判断するためにURLをチェックします。
function reduceFetch(state = initialState, action) {
switch(action.type) {
case FETCH_START:
return {initialState, action.url};
case FETCH_SUCCESS:
if (state.uri === action.url) {
return {state, resp: action.resp};
} else {
return state;
}
...
}
}
あなたの助けをありがとう!
ありがとうTarabanko、これは私が思ったものですが、実装方法はわかりませんでした。 – level55