我开始学习React/Redux,偶然发现了一些可能是非常基本的问题.下面是我的应用程序中的代码片段,为了简单起见,删除了一些代码.
我的状态由一个默认为空的站点数组描述.稍后,reducer将有LOAD_SITES
个操作来加载一组不同的站点,只要用户分页到不同的页面,但现在它什么也不做.React首先渲染PublishedSitesPage
,然后渲染PublishedSitesBox
,然后在数据上循环并渲染各个站点.
我想做的是,让它用默认的空数组呈现所有内容,同时启动"从服务器加载站点"promise ,一旦解决,发送LOAD_SITES
个操作.打这个电话最好的方式是什么?我在考虑PublishedSitesBox
或componentDidMount
的构造函数.但不确定这是否有效——我担心的是,我会以这种方式创建一个无休止的循环,从而继续重新渲染.我想我可以通过使用"haveRequestedInitialData"这一行的其他状态参数,以某种方式防止这种无休止的循环.我的另一个 idea 是在做了ReactDOM.render()
件事后立即做出这个promise .最好、最干净的方法是什么?
export default function sites(state = [], action) {
switch (action.type) {
default:
return state;
}
}
...
const publishedSitesPageReducer = combineReducers({
sites
});
ReactDOM.render(
<Provider store={createStore(publishedSitesPageReducer)}>
<PublishedSitesPage />
</Provider>,
this.$view.find('.js-published-sites-result-target')[0]
);
...
export default function PublishedSitesPage() {
return (
<PublishedSitesBox/>
);
}
...
function mapStateToProps(state) {
return { sites: state.sites };
}
const PublishedSitesBox = connect(mapStateToProps)(({sites}) => {
// render sites
});