使用 React 中的 Fetch api 从 createContext 中的 api 获取数据不起作用

Posted

技术标签:

【中文标题】使用 React 中的 Fetch api 从 createContext 中的 api 获取数据不起作用【英文标题】:Fetch data from api in createContext using Fetch api in React doesn't work 【发布时间】:2021-09-29 22:09:21 【问题描述】:

我有一个现有的context 用于产品。最初我使用如下所示的一些模拟数据STORE_DATA 来渲染组件。现在我需要替换该模拟数据并连接到我的local port 上可用的Node.js api(在我创建react-app 之后创建了我的api)。

import React,  createContext, useState  from 'react';
import STORE_DATA from '../shop';

export const ProductsContext = createContext();

const ProductsContextProvider = ( children ) => 
const [products] = useState(STORE_DATA);

return (
  <ProductsContext.Provider value= products >
    
      children
    
  </ProductsContext.Provider>
 );


export default ProductsContextProvider;

刚刚创建了一个helper.js 文件,其中包含以下内容来获取数据:

 import useEffect from "react";


const fetchData = () => 
    return fetch("https://localhost:8081/products") <<tested on postman and works fine.
          .then((response) => response.json())
          .then((data) => console.log('Fetching Data:',data));

如何替换context 文件上的模拟数据并在context 中使用useEffect 使用此fetchData()?应该改什么代码?

尝试了以下,但没有成功,甚至无法打印console.log

import React,  createContext, useState, useEffect  from 'react';
import  fetchData  from '../helpers';

export const ProductsContext = createContext();

const ProductsContextProvider = ( children ) => 
  const [products, setProducts] = useState(null);

  useEffect(() => 
    setProducts(fetchData());
    , []);

  return (
    <ProductsContext.Provider value= products >
      
        children
      
    </ProductsContext.Provider>
  );


export default ProductsContextProvider;

【问题讨论】:

【参考方案1】:

问题在于它返回以下错误 (explained):

net::ERR_SSL_PROTOCOL_ERROR (on chrome)

解决方案:在以下代码中的 URL 中使用 http:// 而不是 https://

const fetchData = () => 
    return fetch("http://localhost:8081/products") 
          .then((response) => response.json())
          .then((data) => console.log('Fetching Data:',data));

【讨论】:

【参考方案2】:

CORS 问题。尝试为 CORS 放置标题: 请参阅此链接以获得明确的答案: https://stackabuse.com/handling-cors-with-node-js

如果没有 CORS 设置,您的 Reactjs API 将被阻止,您可以检查控制台是否相同。 它会抛出:net::ERR_FAILED

【讨论】:

cors 不是问题。它已在api 中使用。问题是如何更改context 代码,它将使用api 而不是模拟数据。

以上是关于使用 React 中的 Fetch api 从 createContext 中的 api 获取数据不起作用的主要内容,如果未能解决你的问题,请参考以下文章

React 无法使用 Fetch API 下载数据 [重复]

在 React 应用中使用 fetch 渲染 json 数据

如何在 React 中使用 fetch() API 来设置状态

使用 react js 和 express API 服务器发布一个带有 fetch 的对象

如何使用 React.js 中的 Fetch API 将数据发布到数据库

如何在 React 中使用 fetch 正确处理来自 REST API 的数据对象