【问题标题】:How to display list in functional component in react, listing data is fetching with axiosreact如何在功能组件中显示列表,列表数据是用axios获取的
【发布时间】:2020-01-22 17:13:29
【问题描述】:

我正在尝试列出通过 axios 来自外部站点的数据。我的代码是

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

export default function Listing() {
  useEffect(() => {});

  const todo = axios
    .get("https://jsonplaceholder.typicode.com/todos")
    .then(todo => {
      todo.data.map(td => {
        //console.log(td.title);
      });
    });
  console.log(todo);

  return (
    <div>
      <ul>
        todo.data.map((tdd)=><li>{tdd.title}</li>);
      </ul>
    </div>
  );
}

如何列出数据?

【问题讨论】:

    标签: reactjs axios


    【解决方案1】:

    这是给你的代码 sn-p。

    import React, { useState, useEffect } from 'react';
    import axios from 'axios';
    
    export default function Listing() {
      const [data, setData] = useState([]);
    
      useEffect(() => {
         async getData(){
            const todo = await axios.get("https://jsonplaceholder.typicode.com/todos");
            setData(todo.data);
         }
       getData();
      },[])
    
    
      return ( <div >
        <ul >
           {data.map((tdd) => <li> {tdd.title}</li>)}
        <ul> 
        <div>
        )
      }
    
    
    

    【讨论】:

      【解决方案2】:

      试试这个方法,添加一个空的[] 作为第二个参数,以避免重复调用useEffect。在数组迭代中添加键也非常重要。也添加插值

      检查这个。 {list.map((tdd)=&gt;&lt;li key={tdd.id}&gt;{tdd.title}&lt;/li&gt;)}

      import React, {useEffect, useState} from 'react'
      import axios from 'axios' 
      
      export default function Hello() {
      
          const [list, setList] = useState([]);
      
          useEffect(()=>{
            axios.get("https://jsonplaceholder.typicode.com/todos")
            .then((todo)=> setList(todo.data));
          },[]) 
              return (
                  <div>
                      <ul>                    
                      {list.map((tdd)=><li key={tdd.id}>{tdd.title}</li>)}              
                      </ul>
                  </div>
              )        
      }
      

      【讨论】:

      • 有什么方法可以在不使用钩子和状态的情况下显示它?
      • @AshwaniPanwar 如果我们使用功能组件,钩子是唯一的解决方案。或者我们可以调用父组件中的api并将值传递给子组件并列出项目。
      【解决方案3】:

      你能试试这个代码吗

      import React, { useEffect, useState } from "react";
      import axios from "axios";
      
      export default function Listing() {
        const [list, setList] = useState([]);
      
        useEffect(() => {
          axios.get("https://jsonplaceholder.typicode.com/todos").then(todo => {
            console.log("todo: ", todo);
            setList(todo.data);
          });
        });
      
        return (
          <div>
            <ul>
              list.map((tdd)=><li>{tdd.title}</li>);
            </ul>
          </div>
        );
      }
      

      【讨论】:

      • 这是错误的实现。它将无限循环执行useEffect,这将导致浏览器死机
      • 其实我忘了 componentDidUpdate 部分是为了 useEffect 是的,你应该像这样使用它useEffect(() =&gt; { axios.get("https://jsonplaceholder.typicode.com/todos").then(todo =&gt; { console.log("todo: ", todo); setList(todo.data); }); }, []);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 2020-08-26
      • 2019-11-15
      • 2021-12-11
      • 2020-08-04
      • 1970-01-01
      相关资源
      最近更新 更多