2017-02-21 4 views
0

サンク。それは素晴らしい作品です。パス引数が約束リデューサーする/ Iが反応し、ミドルウェアなどの約束/サンクでReduxの使用しています

私が把握することはできませんSNE事があります。以下の作品:

私は私のコンポーネントからアクションをディスパッチ:

this.props.dispatch(addTag({ name: name, photoId: this.props.photoId})) 

私の行動は、サンクに包まれたAJAXを実行し、約束を返します。

export function addTag(payload) { 


var url = "/api/photos/".concat(payload.photoId, "/addtag?name=" ,payload.name) 
    return function(dispatch) { 
    var request = new Request(url, {headers: headers}); 
    fetch(request) 
     .then((response) => { 
     dispatch({type: "ADD_TAG", payload: response.json()}) 
     }) 
     .catch((err) => { 
     dispatch({type: "ADD_TAG", payload: err}) 
     }) 
    } 
} 

をし、減速がそれを拾っ:

case 'ADD_TAG_FULFILLED': { 
    newState = state 
     .set('tags', action.payload.tags) 
     .set('inputValue', '') 
    return newState 
    } 

ここで、アクションに渡されるペイロードを減速機? (私を状態に戻し、コンポーネントに戻すために... 私は、サンクと約束のミドルウェアの機能を "破壊"するような方法でこれを行うことができます。これは最善の解決策ですか?

export function addTag(payload) { 
    var url = "/api/photos/".concat(payload.photoId, "/addtag?name=" ,payload.name) 
    return function(dispatch) { 
    var request = new Request(url, {headers: headers}); 
    fetch(request) 
     .then((response) => { 
     return (response.json()) 
     }) 
     .then((json) => { 
     dispatch({type: "ADD_TAG", payload: {suggestions: json, pl: payload}) 
     }) 
     .catch((err) => { 
     dispatch({type: "ADD_TAG", payload: err}) 
     }) 
    } 
} 
+0

は、なぜあなたはミドルウェアの機能を壊していると言うん – Lucas

+0

問題のコンポーネントが新しいReduxの状態を受けるべきである(コンポーネントの状態と混同しないように)小道具として、あなたは図書館のrを使っていますか? eact-redux 'とconnect()関数を使ってこれを行いますか? – ferndopolis

+1

あなたがディスパッチするアクセス権を持っている限り、アクションを実行し、ペイロードをレデューサーに渡すことができます - この例では、フェッチが成功した場合にのみペイロードを渡します。 (あなたが望むのにそれらをチェーンすることができます) – Mateusz

答えて

0

おかげ

ソリューションです@Mateusz:?

export function tagInput(tagInput) { 
    var url = '/api/photos/get_tag_list?term='.concat(tagInput); 
    return function (dispatch) { 
    var request = new Request(url, { headers: headers, method: 'GET' }); 
    fetch(request) 
     .then(response => { 
     dispatch({ type: 'TAG_INPUT', payload: response.json() }); 
     }) 
     .catch((err) => { 
     dispatch({ type: 'TAG_INPUT_ERROR', payload: err }); 
     }) 
     .then(() => { 
     dispatch({ type: 'TAG_INPUT_VALUE', payload: tagInput }); 
     }); 
    }; 
} 
関連する問題