【发布时间】:2016-04-15 11:30:03
【问题描述】:
我有一个使用 React 和 Redux 设置的应用程序,这样我就有一个根应用程序组件包裹在一个提供者周围(它向下传递存储,以便我的子组件可以访问状态和调度),如下所示:
<Provider store={Store}>
<RootComponent />
</Provider>
My RootComponent 本质上使用 JSON 文件来呈现模板组件,这些组件通过键和标题 (
<Application children={children} />
在其中一个孩子中,我使用 @connect 装饰器将应用程序的状态连接到组件,并且在构造时触发调度程序以更新我的“内容”道具,如下所示:
@connect(state => ({content: state.content}))
export default class DynamicText extends Component {
constructor(props) {
super(props);
var Content = require(`./jsonContent`);
props.dispatch(loadContent(Content[props.title].elements));
}
**actions.js**
export function loadContent(content) {
return {
type: 'LOAD_CONTENT',
content
};
}
**reducers.js**
const initialState = {
route: null
};
export default function routeReducer(state = initialState, action) {
switch (action.type) {
case LOAD_CONTENT:
return Object.assign({}, state, {
content: action.content
});
default:
return state;
}
我遇到的问题是,在启动我的应用程序时,“内容”属性未定义 - 但是在页面刷新时,它会填充来自 JSON 文件的更新后的“内容”数据。我认为这个问题可能会发生,因为最初在我的 @connect 装饰器中引用的 state.content 是未定义的,但是我希望构造函数上的立即调度能够解决这个问题。
有没有人有关于如何在不刷新的情况下让它工作的经验或建议? @connect 真的是这里的最佳选择还是有其他选择?
【问题讨论】:
-
据我了解,您正在同步加载内容(使用
require函数)。如果是这样,为什么你不能把它包含在你的初始状态中?另一方面,如果您需要以异步方式下载数据,您可以:1)使其成为您的状态和逻辑的一部分(例如,添加一些loaded标志到状态) 2)仅调用 Reactrender方法数据加载时
标签: javascript reactjs redux react-redux