2017-10-12 16 views
0

reactx 코드를 단순화하기 위해 redux-actions를 사용하고 싶지만 질문이 있습니다.redux-actions를 통해 REQUEST/START 작업을 표현하는 방법은 무엇입니까?

원격에서 일부 주제를 가져 오는 "로드"동작이 있다고합니다. 코드는 다음과 같을 것입니다 :

const load = createActions('LOAD'); 

export function fetch() { 
    return (dispatch, getState) => { 
    dispatch(fetchTopicsRequest()); // <- here is my question. 
    return network 
     .request('/topics?' + qs.stringify(getState().topics.filter.options)) 
     .then(network.handleResponse) 
     .then(result => dispatch(load(result)))  // <- here I got the topics in the payload 
     .catch(error => dispatch(load(error)));  // <- here I got the errors in the payload, in the reducer I check on the "error" field to see if the request successed. 
    }; 
} 

결과가 좋고 오류가 발생하여 한 번의 조치로 발송하는 것이 좋습니다. 그러나 동일한 작업으로 "요청 중"상태를 표현하는 방법은 무엇입니까? 위의 코드에서 알지 못했지만 다른 액션 "fetchTopicsRequest()"를 만들어야합니다. 이렇게하면 전체 코드가 이상하게 보입니다.

초기 불만에서 "상태"필드가있는 것으로 나타났습니다. 그런 경우에 유용 할 수 있습니다. 어디로 갔니? 아니면 그냥 더 좋은 아이디어를 놓친거야?

감사

답변

0

첫째, 난 당신이 행동으로 호출하는지에 대한 이해를 수정하고 싶습니다. 귀하의 경우 함수 fetch()은 작업을 디스패치 할 수있는 작업 생성자이며, load(result)load(error)이 실제 작업을 처리합니다.

이제는 fetchTopicsRequest() 액션의 더 나은 구현을 찾고 있으므로 일반적인 방법으로 작업을 작성해 보시기 바랍니다.

dispatch({type: 'FETCHING_TOPICS'}); 

지금 당신은 당신의 감속기에서이 작업을 캡처하고 무엇이든 topics가 가져 오는 동안 작업을 수행 할 수 있습니다 귀하의 경우에 이런 일이 될 것이라고.

업데이트 :

는 행동과 감속기의 구성을 사용할 수있는 pending 경우를 처리합니다. FETCHING_TOPICS 행동이 당신의 감속기에 다음 발송되면 당신은 truepending를 표시 할 수 있고, response이 수신되면 당신은 다음과 같이 falsepending을 변경할 수 있습니다

function reducer(state={pending: null}, action) { 
    switch(action.type) { 
    case 'FETCHING_TOPICS': 
     return {...state, pending: true}; 
     break; 
    case 'FETCHED_TOPICS': 
     return {...state, pending: false, //payload if any}; 
     break; 
    case 'FETCHING_ERR': 
     return {...state, pending: false, //payload if any}; 
     break; 
    } 
} 
+0

아, 네, 당신의 권리를. 나는 그것을 더 수정할 수있다 :'load (result)'와'load (error)'또한 액션 생성자이고, 실제 액션은 실제 객체가 실제로 전달되었다는 것이다. 내가 원하는 것은 동작의 상태를 나타내는 'error' 필드가 있지만'보류 중 '상태를 표현할 방법이 없다는 것입니다. 그러한 상태를 알아야 할 필요가 있다면 그것을 표현하는 가장 좋은 방법은 무엇입니까? –

+0

이러한 경우를 처리하는 가장 좋은 방법은 작업 및 축소 기의 조합을 사용하는 것입니다. 따라서''FETCHING_TOPICS'' 액션을 디스패치 할 때 감속기에서''''''''로 표시하고'''result''를 보내면됩니다 '또는''error''' 액션을 사용하면 감속기에서''''''''''''로'''''false''를 변경할 수 있습니다. 좀 더 자세한 답변을 업데이트하겠습니다. –

+0

죄송합니다, 친구. 나는 내가 '희생자의 행동'에 대해 말하고 있다는 것을 분명히하지 않았다고 생각한다. 상용구 코드를 줄이기위한 라이브러리. 나는 3 행동 패턴을 안다, 나는 단지 코드베이스를 단순화하기 위해 redux-actions를 사용하기를 바란다. –