React / Flux:从组件的render方法触发动作或从组件执行Rest调用?

时间:2016-11-15 05:04:13

标签: javascript reactjs redux flux

我的组件上有一个按钮,它会导出一个对象的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 Component将要监听的商店。该组件将触发上述代码,但是它必须在其render方法中触发一个动作以将store设置为value为空?
  2. 是从组件的render方法触发动作,正确吗?
  3. 由于这不会从我的应用程序中传输任何数据,我是否应该使用React组件来获取此JSON并将其弹出以供下载?这将使组件进行REST调用。
  4. 而不是3,Fire一个动作创建者,它将获取JSON并弹出下载?在这种情况下,我将在动作创建者中编写上述代码。

1 个答案:

答案 0 :(得分:2)

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

回答你的问题:

  
      
  1. 我应该如何在Flux中使用它?我应该解雇一个动作创建者,它将下载json,然后更新一些商店   FileDownload Component将收听。该组件将触发   上面的代码,但它必须在其render方法中触发一个动作   将商店设置为值为空?
  2.   

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

  
      
  1. 是从组件的render方法触发动作,正确吗?
  2.   

没有。通常,建议您使用componentWillMount进行大多数会影响组件呈现的操作。

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

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

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

如果选项3可用,那么我没有看到这样做的任何好处。只需选择最简单,功能最少的解决方案。