当前位置: 首页 > 知识库问答 >
问题:

使用模块。ES6中的出口

丌官坚秉
2023-03-14

我正在尝试使用模块。导出以创建“全局”函数,我可以在React项目中使用该函数使用Axios进行API调用。

我已经尝试了以下...

import axios from 'axios';

module.exports = {
    fetchApi: function (endPoint) {
        var encodedURI = window.encodeURI('http://localhost:3001/' + endPoint);

        return axios.get(encodeURI)
            .then(function (response) {
                return response.data
            })
    }
}

//call function in other components like this
componentDidMount () {
    fetchApi.fetchApi(this.setState.endPoint)
    .then(function (endPoint) {
        console.log("API endpoint: " + endPoint)
    })
}

这将html" target="_blank">返回错误…'未定义fetchApi没有未定义

我知道,通常你可以使用导出默认导入和导出组件,但我认为这不是必需的,如果使用module.export.

另外,如果我尝试像这样导入。。。

import fetchApi from '../../../utils/api'

我得到以下错误...尝试导入错误:'.../.../.../utils/api'不包含默认导出(导入为'getchApi')。

任何帮助赞赏。谢谢。

编辑:

从“axios”导入axios;

解决方案(编辑)。。。

api.js

const api = {
    fetchApi: function(endPoint){
        var encodedURI = window.encodeURI('http://localhost:3001/' + endPoint);
        console.log(encodedURI)

        return axios.get(encodedURI)
            .then(function (response) {
                return response.data

            })
    }
}

export default api;

地点。js

import api from '../../../utils/api'

    //single api call
    componentWillMount = async () => {
        api.fetchApi('sites')
            .then(data => {
                console.log(data);
                this.setState({ rows: data.rows, columns: data.columns })
            })
            .then(async () => {
                this.setState({ tableRows: this.assemblePosts(), isLoading: false })
            });
    }

这使我可以访问以下api终结点...

http://localhost:3001/sites

谢谢你的帮助。

共有2个答案

葛书
2023-03-14

module.exports应该导出函数,而不是对象。

module.exports = function() {}

然而,如果你的api中有多个函数,你可能会更好地利用命名导出:

exports.fetchApi = function() {}

此外,您可能希望在这里使用async函数和wait,这将有助于清理所有。然后()

潘高洁
2023-03-14

我建议不要混合require和es6导入语法。坚持es6语法。es6语法也是如此。

import axios from 'axios';

const helpers = {
    fetchApi: function(){

    }
}

export default helpers;

用法

import helpers from './helpers';

helpers.fetchApi()
 类似资料:
  • 我正在尝试创建一个导出多个ES6类的模块。假设我有以下目录结构: 和每个导出一个默认ES6类: 我目前有我的设置如下: 但是,我无法导入。我希望能够这样做,但找不到类: 在ES6模块中导出多个类的正确方法是什么?

  • 模块内的所有代码和数据都有文件作用域,这意味着它们不能被模块外部的代码访问。 要在模块外部共享代码或数据,需要使用export关键字导出。 在后端(服务器端)使用模块是相对简单的,你只需使用import关键字。 然而,Web浏览器没有模块或导入的概念,他们只知道如何加载JavaScript代码。 我们需要一种方法来引入一个javascript模块,以便从其他JavaScript代码开始使用它。 这

  • 在过去,我使用了揭示模块模式。 在ES6中,通过对象速记改进了这一点。 现在有了内置的模块语法,我很难找到与上面最相似的首选模式。 选项#1命名导出 选项#2带分解结构的默认导出/导入 选项#3默认导出/导入与名称行间距 我喜欢带有命名导出的选项#1,因为它在“destructuring”导入语法中提供了简单性。 我还想继续在导出对象的导出文件底部显式定义模块的导出API。 我一直在读默认导出是首

  • 我看到ES6模块的公共导出是通过以下两种方式完成的: 这两个都有效吗? 如果是这样,为什么它们都存在? 使用ES6语法的模块导出还有其他有效的选项吗? 我很惊讶我还没能用我的谷歌找到答案。我只关心ES6模块,而不关心通用JS、要求JS、AMD、节点等。

  • 在node的上下文中,我无法理解ES6模块。js。 假设我有一个简单的节点应用程序。它基于iisnode示例,但我在顶部添加了一个。 你好js: 这将导致在模块之外使用导入语句 但是如果我改名为hello。你好。mjs我收到以下错误: 对我来说似乎是个陷阱,有什么出路? (iisnode版本为0.2.26,节点版本为v13.8.0)

  • 我正在尝试使用ES6模块在浏览器中导出和导入对象。 我试过了 但是我得到了错误。 然后我尝试转换它,但现在我收到错误。 在浏览器中不能使用模块吗?