react-native - 当 native 应用程序启动时,将初始状态从 API 调用传递到 createStore

标签 react-native redux react-redux redux-thunk

当我的 react-native 应用程序启动时,我无法初始化我的 redux-state。我需要在应用程序启动之前进行 api 调用以检索数据以保持状态。我想将此调用的结果传递给我的 Provider JSX 元素中的 createStore 函数。
我已经阅读了有关如何做到这一点的不同内容,但它们似乎都不起作用。

这是我的根 App 组件:

import React, { Component } from 'react';
import { View } from 'react-native';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import ReduxThunk from 'redux-thunk';
import reducers from './reducers';
import RouterComponent from './Router';

class App extends Component {
  render() {
    return (
      <Provider store={createStore(reducers, {}, applyMiddleware(ReduxThunk))}>
        <View style={{ flex: 1 }}>
          <RouterComponent />
        </View>
      </Provider>
    );
  }
}


export default App;

我已经阅读并尝试了不同的策略:
- 在 api 调用的 then 回调中包装了 render 方法的 return 语句
- 在 componentWillMount 或 componentDidMount 中进行调用

这些都不适合我。当 react-native 应用程序启动时,从 API 调用传递初始状态的标准方法是什么?

最佳答案

您不能(也不应该)延迟组件的安装,直到 API 调用返回(它甚至可能会失败)。

您可以在等待 API 调用返回时显示加载屏幕,方法是检查某个 Redux 状态(将由 API 结果填充)在您的组件中是否仍然为空(条件渲染)。

如果你想用你的API结果替换整个Redux状态,你需要写一个root reducer,看答案here .

要在应用程序启动时启动 API 调用并在成功时填充状态,您可以将以下内容添加到 Redux store 的任何位置。定义/导入:

fetch(...).then(result => store.dispatch(...))

您可以查看 persisting it with the client,而不是从服务器填充 Redux 状态。如果它适合您的用例。

关于react-native - 当 native 应用程序启动时,将初始状态从 API 调用传递到 createStore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50315639/

相关文章:

javascript - 在 ListView 中添加存储在 JSON 数组中的图像 - React Native

reactjs - React + Redux + Router - 我应该为所有页面/组件使用一种状态/存储吗?

javascript - Redux-Form 可重复字段

javascript - 从文件夹 ES6 导入

javascript - Material UI 自动完成,redux-form 值被破坏

android - 如何从 Java 中的原生 Android Activity 打开我的 React Native 应用程序的特定组件?

react-native - 如何使用选项卡导航器 (createMaterialBottomTabNavigator) 将参数传递给路由?

react-native - 需要点击两次才能在 TextInput 之间切换(应该点击一下即可切换)

reactjs - 有没有办法为错误响应代码设置全局 axios 配置

redux - 如何让下拉菜单在 Statelesswidget 上工作