2016-12-07 14 views
2

이렇게 반응이 많은 프로젝트에서 매우 일반적인 경우가 있습니다 : 라우터가 마운트되기 전에 사용자가 인증 목적으로 JWT (Json Web Token)를 가지고 있는지 확인하십시오.AsyncStorage를 사용하여 React Native에서 Json Web Token을 확인하십시오.

const token = localStorage.getItem() 
if (token !== null) store.dispatch(checkTokenSuccess()) 

을하지만 반응 네이티브가 AsyncStorage 대신 localStorage 사용하고, 비동기 기능이 너무 많은 나를 귀찮게 : 그것은에서 쉽게

은 반응한다. 나는 async 키워드를 가진 함수가 언제나 반응 컴포넌트 대신 약속을 반환하기 때문에 App 컴포넌트 내부에서 비동기식을 사용할 수 없다.

여기 내 코드는, 분명히,이 생겼입니다 : JWT를 가져올 전에

AsyncStorage.getItem('JWT') 
    .then((jwt) => { 
    if (jwt !== null) { 
     store.dispatch(checkJwtSuccess()); 
    } 
    }); 

const App =() => (
    <Provider store={store}> 
    <MainRouter /> 
    </Provider> 
); 

앱은 항상 렌더링합니다.

jwt 가져 오기 약속이 해결 될 때까지 앱 구성 요소 (내 전체 앱의 루트)를 대기시키는 방법은 무엇입니까?

편집 :

@zerkms가 지적한 바와 같이, 자바 스크립트를 차단하지 않습니다. 그런 다음 내가 생각할 수있는 유일한 해결책은 앱을 React 클래스로 바꾸고 componentWillMount()을 사용하는 것입니다.하지만 App 구성 요소를 다루기 힘들게 만듭니다. 더 나은 해결책이 있습니까?

+0

'await'는 차단하지 않습니다에 코드를 작성해야합니다 기대하고있다. – zerkms

+0

@zerkms 코멘트 주셔서 감사합니다! 그러나 그때까지 기다리는 목적은 무엇입니까? 그리고 내가 여기서 차단해야한다고 말하면 어떤 접근 방식을 사용해야합니까? –

+0

자바 스크립트로 차단할 수 없습니다. – zerkms

답변

0

AsyncStorage은 당신이 그것을 구현 정확하게 작동하므로이 매개 변수 errorCallbackvalue, 당신은,이 방법

AsyncStorage.getItem("key",(err,value)) => { 
    if(!err){ 
     console.log(value); 
    } 
}); 
+0

올바른 구문이 아닌 것 같습니다. 공식 문서는 https://facebook.github.io/react-native/docs/asyncstorage.html에서 확인하십시오. –

+0

@ StanleyLuo 맞습니다. 방금 내 대답을 업데이트했습니다. –

+0

사실 여전히 올바르지 않습니다. 첫 번째 인수는 키이어야하며 콜백 함수 여야합니다. –

관련 문제