在 createStore 之前加载数据

Posted

技术标签:

【中文标题】在 createStore 之前加载数据【英文标题】:Load data before createStore 【发布时间】:2018-04-20 00:49:45 【问题描述】:

我创建了一些 React 文件,其中一个初始化了 Redux 存储。但是,我确实需要在 store 初始化之前从 json 文件中加载一些数据。

我尝试导入一个加载 json 结构的脚本,然后将其分配给 createStore 的 initialState 值。但是 createStore 在加载和分配数据之前运行。

有什么简单的方法可以说“在我的 axios 调用完成之前不要做任何事情”???

【问题讨论】:

【参考方案1】:

动作类型 actiontypes.js

export const LOAD_DATA_REQUEST='LOAD_DATA_REQUEST';
export const LOAD_DATA_SUCCESS='LOAD_DATA_SUCCESS';
export const LOAD_DATA_ERROR='LOAD_DATA_ERROR';

动作

actions.js

import * as Actions from './actiontypes';

function load() 
    return  type: Actions.LOAD_DATA_REQUEST ;


function success(res) 
    return  type: Actions.LOAD_DATA_SUCCESS, payload: res ;


function error(ex) 
    return  type: Actions.LOAD_DATA_ERROR, payload: ex ;

export function loadData(url) 
    return (dispatch) => 
        dispatch(load());
        axios.get(url).then((res) => 
            dispatch(success(res));
        ).catch((ex) => 
            dispatch(error(ex));
        );
    ;

在需要的减速器中使用它

import * as Actions from './actiontypes';
const newState = Object.assign(, state);
switch (action.type) 
    case Actions.LOAD_DATA_REQUEST:
        
            //maybe you load
            newState.loading = true;
            return newState;
        
    case Actions.LOAD_DATA_SUCCESS:
        
            const res = action.payload;
            //do what you need  for this reducer

            return newState;
        
    case Actions.LOAD_DATA_ERROR:
         /// maybe you will want to show some error message in some reducer? 
        return newState; 
    

您只需要在您的应用程序的第一个屏幕上的 componentWillMount() 调用 loadData() 操作

希望对你有帮助

【讨论】:

谢谢 :) 我想这会奏效。但在您的情况下,Redux 商店已经启动并运行。我的问题是其他组件试图访问存储值。所以想在 createStore 运行之前加载 json 对象。但我想你的例子是我见过的最好的建议。 不客气。把所有的东西都想成盒子..在 createStore 之前填充它没有区别。制作一个组件 SplashScreen 并在您的一个 recuder 上使用诸如加载状态之类的属性呈现一条消息,例如“正在加载应用程序请等待”,如果加载状态为 false,则呈现子组件(您的主要组件)。我希望现在很清楚.. 感谢 Saltuk!隐藏(不渲染)直到加载成功。谢谢你帮助我。

以上是关于在 createStore 之前加载数据的主要内容,如果未能解决你的问题,请参考以下文章

create-react-app:如何在 React 渲染之前加载 html

当反应原生应用程序启动时,将初始状态从 API 调用传递给 createStore

在加载数据之前触发mounted方法 - VueJS

当调用 createStore() 我得到: TypeError: middleware is not a function

如何使用 Vue.js + Vuex (createStore) 将“状态”变量保存到浏览器 localStorage

vue的生命周期 created mounted等