javascript - 在react-native组件中实现async/await函数

标签 javascript reactjs react-native async-await ecmascript-2017

我正在尝试实现一个函数,该函数在渲染主“App”组件之前检查用户是否经过身份验证,但我无法在 promise 解决后运行我的代码。

class App extends Component {
    render() {
        const sagaMiddleware = createSagaMiddleware();
        const reduxStore = createStore(reducers, {}, applyMiddleware(ReduxThunk, sagaMiddleware));
        sagaMiddleware.run(Sagas)

        getToken = async () => {
            const token = await store.get('token')
            .then( (token) => {
                if (token !== null)
                    reduxStore.dispatch({type: LOGIN_USER});
            })
            .catch( (error) => console.log(error) )
        }

        getToken();

        return (
            <Provider store={reduxStore}>
                <Router>
                    <Scene key="root">
                        <Scene key="login" component={ LoginPageContainer } hideNavBar={true}/>
                        <Scene key="feed" component={ RequireAuth(FeedPageContainer) } initial={true} hideNavBar={true}/>
                    </Scene>
                </Router>
            </Provider>
        )
    }
}

export default App;

上面的代码工作得很好,只是它在 getToken() 函数完成之前渲染组件。我想我可能还没有完全理解 async/await 是如何工作的。提前致谢!

最佳答案

这段代码有几个问题。您不应该在 render() 函数中进行任何设置。它应该纯粹用于显示当前状态,不应该引起任何副作用。

所以我会将商店创建移至构造函数。

然后,您应该使用 redux connect helper 将组件连接到商店。

您也可以在构造函数中触发任何设置操作,例如检查 token 是否存在。

我推荐使用 redux-thunk 进行异步操作。调度操作创建者允许您获取状态并相应地触发其他操作。

关于javascript - 在react-native组件中实现async/await函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43788486/

相关文章:

javascript - 使用 create-react-app 和 webpack 开发服务器将客户端 React 应用程序的请求代理到服务器

ios - 使用 React Native 组件的 UIImagePickerController 叠加 View

javascript - _rnAppleHealthKit.default.initHealthKit 不是函数 -> rn-apple-healthkit

javascript - 如何使用或不使用 PHP 使通过 Javascript 生成的颜色永久存储在 CSS 文件中

javascript - 错误 : An API error occurred: invalid_auth

javascript - React ref 的流类型

react-native - 如何解决 React Native 中的此错误

javascript - 使用 jquery 仅更改图像源中的目录

javascript - 未捕获的 ReferenceError,Splide 未在 HTMLDocument 中定义

javascript - "or"运算符在 react 的渲染方法中没有按预期工作