我在哪里从 React Redux 应用程序中的服务器获取初始数据
Where do I fetch initial data from server in a React Redux app?
我已经开始学习 React/Redux,偶然发现了一些可能是一个非常基本的问题。以下是我的应用程序中的代码片段,为了简单起见,删除了一些代码。
我的状态由一组站点描述,默认情况下该站点为空。稍后的reducer将具有LOAD_SITES
操作,以便在用户分页到不同页面时加载一组不同的站点,但现在它什么都不做。React 首先渲染PublishedSitesPage
然后渲染PublishedSitesBox
然后循环数据并渲染单个站点。
我想做的是让它使用默认的空数组渲染所有内容,同时启动"从服务器加载站点"承诺,一旦解决,就调度LOAD_SITES
操作。拨打此电话的最佳方式是什么?我在考虑PublishedSitesBox
的构造函数或componentDidMount
.但不确定这是否有效 - 我担心我会以这种方式创建一个无限循环,不断重新渲染。我想我可以通过按照"haveRequestInitialData"的行使用其他一些状态参数来以某种方式防止这种无限循环。我的另一个想法是在做完ReactDOM.render()
后立即做出这个承诺。最好和最干净的方法是什么?
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
});
这个数据加载逻辑根本没有理由触及你的 React 组件。这里你想要的是返回承诺,将一个动作调度到你的化简器,这些化简器对存储进行适当的更改,然后导致 React 组件根据需要重新渲染。
(无论你是在调用 ReactDOM.render 之前还是之后启动异步调用并不重要;无论哪种方式,承诺都将起作用)
像这样:
var store = createStore(publishedSitesPageReducer);
someAsyncCall().then(function(response) {
store.dispatch(someActionCreator(response));
});
ReactDOM.render(
<Provider store={store}>
<PublishedSitesPage />
</Provider>,
this.$view.find('.js-published-sites-result-target')[0]
);
您的 React 组件是您商店的消费者,但没有规定它们必须是您商店的唯一消费者。
一个关于如何做到这一点的明显例子: 脸书教程
至于无限循环,一旦你的数组不再为空,清除间隔。这应该可以防止循环。
- 使用c#中的邮件附件javascript在客户端机器上获取服务器端导出的crystal报告路径.下面的
- 使用PHP或Javascript获取服务器状态
- 尝试获取服务器响应
- 以特定时区的javascript获取服务器时间
- 使用javascript ASP.NET获取服务器控件上的子控件
- 可以´t从对象XMLHttpRequest获取服务器响应
- jQuery侦听器以获取服务器更新
- 如果我使用html表单(而不是ajax),则获取服务器的响应代码或返回值
- 是否可以将 Apache 配置为允许浏览器中的 JS 获取服务器目录内容
- 无法使用 asp.net 获取服务器端的javascript返回的国家/地区名称
- 如何使用 Web 表单(不是 MVC 或 asmx 页面)从 ajax Http POST 获取 c# 服务器端的复选框
- 如何获取服务器时间并每秒更新
- 内置JavaScript / Greasemonkey函数来获取服务器时间
- 如何在客户端获取服务器删除/更新收集项的 ID
- 通过 Java 脚本获取服务器控件属性值
- 如何获取服务器的当前日期时间
- 如何在客户端Node.js中获取服务器错误消息
- 如何使用javascript获取服务器时间
- 通过select2-x-editable获取服务器端php输出
- 如何使用javascript获取服务器上文件的日期