我正在构建一个应用程序,我需要在应用程序启动时预加载people
和planet
数据(将来可能会添加更多预加载要求)。我想在将应用程序的全局状态表示为loaded: <boolean>
. 当预载值的要求是真实的,只有那么people.loaded: true
和planet.loaded: true
是真实的。商店看起来像这样:
Store
├── loaded: <Boolean>
├── people:
│ ├── loaded: <Boolean>
│ └── items: []
├── planets:
│ ├── loaded: <Boolean>
│ └── items: []
单独的动作创建者发出所需的异步请求并分派由People
和Planets
减速器处理的动作。如下图(使用redux-thunk):
actions/index.js
import * as types from '../constants/action-types';
import {getPeople, getPlanets} from '../util/swapi';
export function loadPeople () {
return (dispatch) => {
return getPeople()
.then((people) => dispatch(addPeople(people)));
};
}
export function loadPlanets () {
return (dispatch) => {
return getPlanets()
.then((planets) => dispatch(addPeople(planets)));
};
}
export function addPeople (people) {
return {type: types.ADD_PEOPLE, people};
}
export function addPlanets (planets) {
return {type: types.ADD_PLANETS, planets};
}
export function initApp () {
return (dispatch) => {
loadPeople()(dispatch);
loadPlanets()(dispatch);
};
}
../util/swapi
处理从 LocalStorage 或发出请求获取人和行星数据。
initApp()
动作创建者在site.js
渲染到 DOM 之前调用其他动作创建者,如下所示:
site.js
import React from 'react';
import {render} from 'react-dom';
import Root from './containers/root';
import configureStore from './store/configure-store';
import {initApp} from './actions';
const store = configureStore();
// preload data
store.dispatch(initApp());
render(
<Root store={store} />,
document.querySelector('#root')
);
1. 在 Redux 中管理应用程序的全局预加载状态的最佳实践是什么?
2. 是否有loaded
必要在 store中设置全局状态?
3.loaded
在多个 React 组件中检查应用程序状态的可扩展方式是什么?为只需要知道全局应用程序状态而不处理or 的呈现的容器包含People
和Planet
声明似乎是不正确的。当多个容器中需要全局状态时,管理起来也会很痛苦。People
Planets
loaded
引用Redux中 Dan 的部分回答- 多个商店,为什么不呢?问题。
使用reducer组合可以通过编写reducer手动调用其他reducer并以特定顺序调用其他reducer,从而在Flux中轻松实现“依赖更新”。
4、Dan 调用其他reducer 是否意味着调用嵌套reducer?