开发者问题收集

我怎样才能在前面显示后面的请求?

2020-06-12
96

我已经创建了后端,并且它运行正常。我测试了不同的 Axios 请求以创建表单。 在我的 React 前端项目中,我创建了一个 POST axios 请求,我 console.log(response.data) 并获得了一个带有 id、标题和问题的对象。

我卡住了,因为我不知道如何在我的前端显示对象的数据。

这是我的前端 React 代码:

import React, { useState, useEffect } from "react";
import { Link } from "react-router-dom";
import axios from "axios";

const NewForm = () => {
  const [data, setData] = useState([]);

  useEffect(() => {
    const fetchData = async () => {
      if (data.length === 0) {
        const response = await axios.post(
          "https://back-formnest-lereacteur.herokuapp.com/form/create",
          {
            title: "Your event",
          }
        );
        console.log(response.data);
        setData(response.data);
      }
    };

    fetchData();
  }, [data]);

  return (
I am completely stuck here to display the data of my backend in my front

这是我的后端代码:

const express = require("express");

const router = express.Router();

const Form = require("../models/Form");


router.post("/form/create", async (req, res) => {
  try {

    if (req.fields.title) {
      const newForm = new Form({
        title: req.fields.title,

      });


      await newForm.save();
      return res.json(newForm);
    } else {
      return res.status(400).json({ error: "Missing parameters" });
    }
  } catch (e) {
    return res.status(400).json({ error: e.message });
  }

});

这是我的 console.log(response.data),我想在我的前端 React 页面中显示: console.log(reponse.data)

screen shot of bugs

我编辑了我的代码,但出现错误:

import React, { useState, useEffect } from "react";
/* import { Link } from "react-router-dom"; */
import axios from "axios";

const NewForm = () => {
  const [data, setData] = useState([]);

  useEffect(() => {
    const fetchData = async () => {
      if (data.length === 0) {
        const response = await axios.post(
          "https://back.herokuapp.com/form/create",
          {
            title: "Nouveau formulaire",
          }
        );
        console.log(response.data);
        setData(response.data);
      }
    };

    fetchData();
  }, [data]);

  return (
    <>
      <div>My forms</div>

      <div>
        {data && (
          <>
            <p>{data.title}</p>
            {data.questions.map((question, index) => (
              <div> {question} </div>
            ))}
          </>
        )}
      </div>
    </>
  );
};

export default NewForm;

screen shot of the error

大家好,

我更新了代码,但仍然出现错误代码(TypeError:无法读取未定义的属性“length”)

<>
      <div>My forms</div>

      <div>
        {data && (
          <>
            <p>{data.title}</p>
            {data.questions.length &
              data.questions.map((question, index) => {
                return <p key={index}>{question}</p>;
              })}
          </>
        )}
      </div>
    </>

我再次更新了我的代码,我成功只显示了我的表单,但我无法成功显示问题数组中包含的数据。我的数据中出现了“0”。请帮忙

return (
    <>
      <div>My forms </div>

      <div>
        {data && data.questions && (
          <>
            <div>{data.title} </div>

            {data.questions.length &
              data.questions.map((question, index) => {
                return <p key={index}>{question}</p>;
              })}
          </>
        )}
      </div>


    </>

我再次更新,出现同样的错误:

return (
    <>
      <div>My forms </div>

      <div>
        {data &&
          data.questions &&
          data.questions.length(
            <>
              <div>{data.title} </div>

              {data.questions.map((question, index) => {
                return <p key={index}>{question}</p>;
              })}
            </>
          )}
      </div>
2个回答

您已经完成了最困难的部分!

现在,如果您想将它们显示出来,只需将 .map 放在问题数组上即可?

<div>
 {data.questions.map((question => (
    <div> {question.title} </div>
 ))}
</div>

我只做了一个简单的例子,但当然您可以根据需要显示任意多或任意少的内容

当然,您可以渲染任何状态。因此,如果您想显示标题,请执行以下操作:

{data.title},无论您喜欢什么

Red Baron
2020-06-12

看起来您的后端用一个对象做出响应,因此您可以按照以下方式进行操作。

1)像这样将您的初始状态更改为未定义。

const [data, setData] = useState([]);

const [data, setData] = useState(undefined);

然后您可以像这样在显示中使用它

return (
    <div>
        {data && (
            <>
                <p>{data._id}</p>
                <p>{data.title}</p>
                {data.question.length && data.question.map((question,idx) => {
                    // this is assuming that each question is just a string and not an object
                 return   (<p key={idx}>{question}</p>)
                })}
            </>
        )}
    </div>
)
Shmili Breuer
2020-06-12