【问题标题】:Export data returned by 'fetch' from a separate .js file in React从 React 中的单独 .js 文件中导出 'fetch' 返回的数据
【发布时间】:2018-01-22 19:59:15
【问题描述】:

这是我的代码

const data = () => fetch("https://api.myjson.com/bins/mp441")
      .then(response => response.json())
      .then(obj => data = obj);

const RECORD_NOS=Object.keys(data).length-1;

export {data, RECORD_NOS}

我正在尝试获取托管在上述 url 上的 json 数据,将数据保存在一个变量中并将其导出以在我的 React 应用程序的各个位置使用,但不幸的是它给出了以下错误。

./src/resources/index.js
Syntax error: D:/Users/kumahay/Documents/lending-referrals-app/src/resources/index.js: "data" is read-only

  1 | const data = () => fetch("https://api.myjson.com/bins/mp441")
  2 |       .then(response => response.json())
> 3 |       .then(obj => data = obj);
    |                    ^
  4 | 
  5 | const RECORD_NOS=Object.keys(data).length-1;
  6 |

我尝试了控制台日志记录而不是分配数据,但它不起作用。显然没有获取数据。如何更好地构建此代码以使其按预期工作?我是 javaScript 的初学者,因此我们将不胜感激。

【问题讨论】:

  • 您正在尝试在代码中设置 const 数据。你不能设置 const 的值。

标签: javascript reactjs redux


【解决方案1】:

我认为你应该阅读更多关于异步函数、Promises 和 fetch 的内容。最好的方法是导出getData 函数,删除.then(obj => data = obj) 并在类似这样的任何其他模块中使用它

getData.js

export const getData = () => fetch("https://api.myjson.com/bins/mp441")
  .then(response => response.json())

anyOtherFile.js

import {getData} from './path/to/getData.js';

export const someFunc = () => {
   getData().then(data => {
       /* do what you want to do in promise resolve callback function */
   })
}

或使用 async/await 表示法

getData.js

export const getData = async () => fetch("https://api.myjson.com/bins/mp441")
  .then(response => response.json())

anyOtherFile.js

import {getData} from './path/to/getData.js';

export const someFunc = async () => {
    const data = await getData();
}

【讨论】:

  • async () => fetch("https://api.myjson.com/bins/mp441")... 这没有意义。如果您不使用await,则不需要使您的功能async
  • 正如您在 anyOtherFile.js 中看到的那样,使用了 await =) 但您完全正确)
  • 但是在 anyOtherFile.js 文件中我如何将数据导出为 json 对象?
  • @AkshayKumar 你不能导出异步请求的纯结果
【解决方案2】:

请将数据名称更改为响应数据,而不是 常量使用变量。常量不能被覆盖但变量 可以。

例子:

var data = "某事";

const name ="Japarsathik";

var salary = "$5000";

【讨论】:

  • 即使他改名,他的const RECORD_NOS=Object.keys(data).length-1; 常量也会导致Cannot convert undefined or null to object,因为结果是未定义的
猜你喜欢
  • 2014-10-18
  • 1970-01-01
  • 2023-04-03
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2018-11-12
相关资源
最近更新 更多