2016-07-20 6 views
2

Redux를 사용하여 내 앱 상태를 관리하고 redux-thunk으로 비동기 작업을 수행했습니다.디스패치없이 redux-thunk 작업 실행

export const login = credentials => dispatch => { 
    return doLogin(credentials).then(token => { 
     localStorage.setItem('token', token) 
     // this dispatch call was there before, but now it has gone, 
     // because it is not necessary anymore 
     // dispatch({ type: LOGIN_SUCCESS }) 
    }) 
} 

이제는 작업을 저장소로 보내지 않으며, 로그인 및 저장 토큰에 대한 작업 만 수행합니다.

그런 종류의 행동을해도 괜찮습니까? 나는이 코드에 대해 매우 확신하지는 않지만 그것을 더 잘 만드는 방법을 모른다.

+0

이 기능은 상태로 전혀 수행하지 않습니까? –

답변

1

엄격한 규정이없는 것에 대한 의견을 묻고 싶지만, 어림짐작은 해당 응용 프로그램에서 일어난 일에 대한 최소한의 설명이어야한다는 것입니다.

일반적으로 Thunkified 조치는이 동작의 일시적인 해결책이지만이 경우에는 Reduce 상태에 영향을 미치지 않더라도 (Thunk) 미들웨어를 사용하여 부작용을 수행하고 미들웨어는 동작에 응답하도록 설계되었습니다.

그것이 좋은 연습 끝으로 아직 시작에 dispatch({ type: 'LOGIN_REQUEST' })dispatch({ type: 'LOGIN_SUCCESS'})이 될 수도 있지만 당신은, 다운 스트림하지 않습니다 정말 문제 감속기에 의해 소비되지 않은 '업스트림'조치를 트리거하고 있다는 사실 만 따라서 다운 스트림 응용 프로그램은 나중에 어떤 작업을 수행하려는 경우 진행중인 작업을 알 수있는 방법을 제공합니다.

1

맛은 좋지만 개인적으로 작업 작성자와 효과 (로컬 저장소에 설정된 항목)를 긴밀하게 연결하지는 않습니다.

대신에 조치를 취할 것입니다. LOGIN_SUCCESS (토큰이 데이터로 전달됨). 그런 다음 액션 유형을 처리하는 미들웨어를 갖습니다. 즉 토큰을 로컬 저장소에 설정합니다.

이렇게하면 doLogin에서 반환 한 자격 증명을 처리하는 방법에있어 유연성을 더 얻을 수 있습니다. 당신은 자신의 일을하고 최선을 다하는 소프트웨어의 각 패러다임을 추구해야합니다. 따라서 사용자를 인증하는 기능을 통해 승인 토큰을 처리하는 방법을 가장 잘 알고있는 다른 조각으로 인증 토큰을 넘깁니다.

+0

당신은 아마 미들웨어에 관한 것입니다. 하지만 localStorage는 해당 기능에만 사용되므로이 경우에는 미들웨어를 추가하는 것이 오버 헤드라고 생각했습니다. –

+0

나는 그렇게 생각한다. 그러나 여전히 분리 된 우려는 쉽게 추론 할 수있다. 무엇보다도 선택의 문제입니다. – WTK