【问题标题】:React/Flux: Firing an action from a render method of an component or doing a Rest call from a component?React/Flux:从组件的渲染方法触发操作或从组件执行 Rest 调用?
【发布时间】:2017-03-28 21:30:17
【问题描述】:

我的组件上有一个按钮,它将导出对象的 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();
    }

我有一些问题:-

  1. 我应该如何在 Flux 中安装它?我是否应该触发一个动作创建者,它将下载 json,然后更新 FileDownload 组件将监听的某个存储。该组件将触发上述代码,但随后它必须在其渲染方法中触发一个操作以将 store 的值设置为空?
  2. 从组件的渲染方法中触发动作是否正确?
  3. 由于这不会从我的应用程序中流出任何数据,我是否应该只使用 React 组件来获取此 JSON 并将其弹出以供下载?这将使组件进行 REST 调用。
  4. 不是 3,而是触发一个动作创建器,它将获取 JSON 并将其弹出以供下载?在这种情况下,我将在动作创建器中编写上述代码。

【问题讨论】:

    标签: javascript reactjs redux flux


    【解决方案1】:

    首先为什么不直接从您的 API 服务器触发下载?

    回答您的问题:

    1. 我应该如何在 Flux 中安装它?我是否应该解雇一个动作创建者,它将下载 json,然后更新某个存储 FileDownload 组件会监听。该组件将触发 上面的代码,但是它必须在它的渲染方法中触发一个动作来 将 store 设置为空?

    如果该组件的唯一目的是触发下载,您可能不需要其中的组件。如果以下选项不可用,我可能会在动作创建者回调中处理它

    1. 从组件的渲染方法中触发动作是否正确?

    没有。通常建议您将componentWillMount 用于影响组件渲染的大多数操作。

    1. 由于这不会从我的应用程序中传输任何数据,我是否应该使用 React 组件来获取此 JSON 并将其弹出以供下载 ?这将使组件进行 REST 调用。

    我假设这指的是触发从您的 API 服务器下载?如果是这样,我会使用这种方法。 UI 不需要关心如何格式化文件以供下载。

    1. 不是 3,而是触发一个动作创建器,它将获取 JSON 并将其弹出以供下载?在这种情况下,我将编写上面的代码 在动作创建者中。

    如果选项 3 可用,那么我看不出这样做有什么好处。只需选择最简单且功能最弱的解决方案即可。

    【讨论】:

    • @WiktorStribiżew 你去吧。再次感谢之前的帮助
    猜你喜欢
    • 1970-01-01
    • 2016-08-17
    • 2017-03-08
    • 2017-08-25
    • 1970-01-01
    • 2017-10-05
    • 2016-07-21
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多