2017-03-01 4 views
2

실제로 상태를 변경하지 않고 redux 동작을 적용하려면 어떻게해야합니까?상태를 변경하지 않고 redux 동작에 반응하는 방법

기존 코드를 redux로 포팅합니다. 로그 아웃 버튼을 클릭하면 기존 함수 logout()이 사용자를 로그 아웃하는 AJAX 요청을합니다. 그 요청이 실패 할 경우 이식 된 코드에서 alert('Logout failed'); 호출 로그 아웃 버튼 redux-thunk를 사용하여 구현되는 액션 제작자 호출

export function logout(email, pass, callback) { 
    return function(dispatch) { 
    axios.get('/logout') 
     .then(function(response) {dispatch({type: 'LOGOUT_SUCCESS'})}) 
     .catch(function(error) {dispatch({type: 'LOGOUT_FAILURE', message: error.response.data})}); 
    }; 
} 

감속기는 LOGOUT_SUCCESS 작업을 처리하고있는 상태에서 사용자 객체를 삭제 똑바로. 하지만 실패 사례를 처리하고 alert()을 시작해야합니까?

  • 액션 작성자 alert()를 호출 할 수 있지만, 어떻게 든 나는이
  • 감속기는 alert()를 호출하고 그냥 같은 상태를 반환 할 수있는 권리 장소가 아니다 느낌 ...하지만 나쁜 생각 감속기가해야하기 때문에 보인다 부작용이없는 순수한 기능이어야합니다.
  • 감속기는 {messages: ['Login failed']}과 같은 상태를 반환 할 수 있으며 코드의 일부가 이에 대응할 수 있으며 경고를 던지고 상태에서 메시지를 제거하는 다른 작업을 호출합니다. 그러나 이것은 불필요하게 복잡해 보입니다.

이벤트를 통해 작업을 트리거하지만 상태를 변경하지 않으려는 경우에 적합한 패턴은 무엇이며 작업 작성자로부터 계속 나오고 싶습니까?

답변

2

로그인이 실패 할 때 일어나는 유일한 일은 경고입니다. 그냥 거기에있는 기능에서 호출하십시오.

반응은 단순한 자바 스크립트이므로 이데올로기에 강요하지 마십시오. 이러한 패턴은 규칙이 아닌 지침입니다.

얄크보다 선언적 방식으로 redux 부작용을 처리하는 redux-saga을 확인해보십시오.