【问题标题】:UseEffect not fetching data with axiosUseEffect 不使用 axios 获取数据
【发布时间】:2021-02-17 06:19:07
【问题描述】:

当我第一次登陆结果页面时,我想查询我的数据库。我想从数据库中获取一些数据,并通过这样的 axios 在前端提供一个 id。

import { useEffect } from "react";
import axios from "axios";

const Results = ({ linkURL, surveyId }) => {

    const linkToShare = linkURL;

    useEffect(() => {
        axios.get(`/get-questions/${surveyId}`);
    }, []);

    return (
        <>
            <h1>Results page</h1>
        </>
    );
};

export default Results;

在后端我没有收到任何请求,并且在页面上刷新时它没有显示任何内容。至少我应该能够看到 req.params。

app.get("/get-questions/:survey", (req, res) => {
    console.log("Route working", req.params);
});

我认为这不是参数的问题,而是 useEffect 的问题,因为我无法在这条路线上与服务器建立任何连接。尝试了几条没有参数的路线,什么也没有。看不到控制台上记录的任何内容。 Axios 在其他路线上运行良好。知道这里出了什么问题吗?

编辑

检查我看到的网络工具。上面的行是一个可以正常工作的发布请求。第二个是我到达不工作的服务器。即使我得到 200。

【问题讨论】:

  • IP丢失是因为是私有IP?我没有看到对基本 URL 的任何引用
  • 好的,我想你应该给我们更多的调试信息:打开你调用 Axios 的页面并检查它。在可用的工具中 [Elements, Console, etc.] 选择 Console 并查看是否显示任何错误。如果请求已正确发送到服务器,请检查“网络”选项卡。在检查了这两个元素之后,我们可以做进一步的考虑。
  • 等一下,如果您收到 200 响应代码,则客户端正在正确调用服务器。下一步:尝试在响应中发送一些内容:然后,始终在网络中,当您单击“预览”时,您应该会看到响应的正文。如果响应在那里,那么您必须使用使用状态挂钩来设置状态并生成您的页面
  • 我在下面为您发布了“后续步骤”,如果您发现中间有一些问题,请告诉我,我会尝试添加更多步骤
  • 在看到响应后,我看到我以纯 HTML 格式获取 index.html 作为响应,一切都只是服务器初始化的提升。我非常感谢@AndreaCostanzo1 的帮助。你给了我一些宝贵的调试能力!

标签: reactjs axios use-effect


【解决方案1】:

查看您提供的所有调试信息后,我可以告诉您请求已正确执行。下一步是:

  1. 尝试在回复中发送一些内容:然后,始终使用Network,当您点击Preview 时,您应该会看到回复的正文。

这只是一个例子:

  1. 如果您可以正常看到响应,下一步就是更新 UI:
import { useEffect, useState } from "react";
import axios from "axios";

const Results = ({ linkURL, surveyId }) => {

    const linkToShare = linkURL;
    const [question,setQuestion] = useState('');

    useEffect(() => {
        axios.get(`/get-questions/${surveyId}`)
.then(res=>setQuestion(res.data.question)); //instead of .question use your JSON structure
    }, []);

    return (
        <>
            <h1>{`Question ${surveyId}:`}</h1>
            <p>{question}</p>
        </>
    );
};

export default Results;

【讨论】:

    【解决方案2】:

    你创建了一个 axios 实例?

    如果没有,你可以这样做:

    import axios from 'axios'
    
    export const api = axios.create({
      baseURL: 'http://localhost:3000',
      timeout: 10000,
      headers: {
        'Content-Type': 'application/json',
      },
    })
    

    像这样导入和使用:

    import React, { useEffect } from "react";
    import { api } from 'instace directory';
    
    const Results = ({ linkURL, surveyId }) => {
    
        const linkToShare = linkURL;
    
        useEffect(() => {
            api.get(`/get-questions/${surveyId}`);
        }, []);
    
        return (
            <>
                <h1>Results page</h1>
            </>
        );
    };
    
    export default Results;
    

    【讨论】:

    • 我已经尝试了一个实例,但也没有用
    猜你喜欢
    • 2021-06-14
    • 2021-10-28
    • 2020-04-21
    • 2021-11-20
    • 1970-01-01
    • 2023-02-01
    • 2019-11-24
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多