我的组件上有一个按钮,它会导出一个对象的json,以便用户可以下载它?要获得JSON,我将不得不进行REST调用以获取JSON然后我正在执行此操作
var definitionJson = JSON.stringify(definition);
var definitionName = definition.name
var exportedFileName = definitionName.concat(".json");
var file = new Blob([definitionJson], { type: 'application/json' });
//needed for IE10
if (window.navigator && window.navigator.msSaveBlob) {
window.navigator.msSaveBlob(file, exportedFileName);
}
else {
var a = document.createElement("a");
a.href = URL.createObjectURL(file);
a.setAttribute("download", exportedFileName);
a.click();
}
我有一些问题: -
答案 0 :(得分:2)
首先,为什么不直接从API服务器触发下载?
回答你的问题:
- 我应该如何在Flux中使用它?我应该解雇一个动作创建者,它将下载json,然后更新一些商店 FileDownload Component将收听。该组件将触发 上面的代码,但它必须在其render方法中触发一个动作 将商店设置为值为空?
醇>
如果该组件的唯一目的是触发下载,那么您可能不需要该组件。我可能会在动作创建者回调中处理它,如果下面的选项不是可用的
- 是从组件的render方法触发动作,正确吗?
醇>
没有。通常,建议您使用componentWillMount
进行大多数会影响组件呈现的操作。
- 由于这不会从我的应用程序中传输任何数据,我是否应该使用React组件来获取此JSON并将其弹出以供下载 ?这将使组件进行REST调用。
醇>
我认为这是指从您的API服务器触发下载?如果是这样,我会使用这种方法。用户界面不需要关心如何格式化文件以供下载。
- 而不是3,Fire一个动作创建者,它将获取JSON并弹出下载?在这种情况下,我将编写上面的代码 在动作创作者中。
醇>
如果选项3可用,那么我没有看到这样做的任何好处。只需选择最简单,功能最少的解决方案。