首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问钩子反应的数据

访问钩子反应的数据
EN

Stack Overflow用户
提问于 2019-11-14 04:10:36
回答 3查看 85关注 0票数 1

我请求这个API,然后将结果保存在“数据”钩子中。当我想打印"data.total_results“时,一切正常,但是当我想打印一个包含更多数据的键时,它不会留下"Data.results .title”

代码语言:javascript
复制
import React, { useState, useEffect } from 'react';

const Movie = () => {
  // Declara una nueva variable de estado, que llamaremos "count".
  const [Data, setData] = useState("");

  useEffect(() => {
    const Cargar = async () => {
      let respuesta = await fetch("https://api.themoviedb.org/3/discover/movie?api_key=ce322f54257cc9286282b320c5e9b2a0&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1");
      let respuestaJSON = await respuesta.json();
      setData(respuestaJSON);
    };
    Cargar();
  }, [Data]);
  return (
    <div>
      {Data.total_results}
      {/* {Data.results[0].title} */}
    </div>
  );
}

export default Movie;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-14 04:35:04

您需要检查是否定义了results属性。

代码语言:javascript
复制
<div className="App">
  <h1>Total {Data.total_results}</h1>
  {typeof Data.results !== "undefined" &&
    Data.results.map((movie, index) => {
      return <h3>{movie.title}</h3>;
    })}
</div>

工作演示https://codesandbox.io/s/distracted-feather-4l55r

几天前,我创建了一个存储库,并使用React实现了OMDB。这可能对你有帮助。

https://github.com/jogeshpi03/omdb-react

票数 1
EN

Stack Overflow用户

发布于 2019-11-14 04:37:02

你的代码几乎是正确的。有一个bug和一些你可以做的改进。

首先,让我们看一下useEffect钩子。

useEffect有两个参数:一个函数和一个依赖项列表。第一次呈现组件时,当任何依赖项发生变化时,函数参数将再次执行。

所以现在,您的依赖项存在一个bug,导致无限循环。在呈现组件时,可以在useEffect中执行该函数。该函数最终将设置Data。当设置Data的值时,这将导致再次执行useEffect函数。它将为数据设置一个新的值,该值将再次执行该函数,并且是无限的。

修复方法是,如果只希望运行一次依赖项,则将依赖项设置为[]。如下所示:

代码语言:javascript
复制
  useEffect(() => {
    const Cargar = async () => {
      let respuesta = await fetch("https://api.themoviedb.org/3/discover/movie?api_key=ce322f54257cc9286282b320c5e9b2a0&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1");
      let respuestaJSON = await respuesta.json();
      setData(respuestaJSON);
    };
    Cargar();
  }, []); // <-------- This changed to []

我希望这能解决你的问题。

现在我将提出一些改进建议:

我会将Data的初始状态设置为undefined

代码语言:javascript
复制
  const [Data, setData] = useState();

然后在JSX中使用一个条件,如下所示

代码语言:javascript
复制
if (!Data) {
  return <div>Loading...</div>
}

return (
  <div>
    {Data.total_results}
  </div>
);
票数 1
EN

Stack Overflow用户

发布于 2019-11-14 05:06:48

const Data,setData = useState([]);

代码语言:javascript
复制
import React, { useEffect, useState } from 'react';
import axios from 'axios';
import ReactTable from 'react-table'
import 'react-table/react-table.css'
const Movie = () => {
  // Declara una nueva variable de estado, que llamaremos "count".

const [Data, setData] = useState([]);
   useEffect(() => {
    axios.get("https://api.themoviedb.org/3/discover/movie?api_key=ce322f54257cc9286282b320c5e9b2a0&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1")
      .then(function(response) {
               console.log(response.data.results)
        setData(response.data.results);

      }).catch(function(error) {
        console.log(error);
      })
  }, []);

  return (<div>
  {Data.map(function (row, i) {  
        return <div key={i}>
        {row.title} 
     </div>
   })}
 </div>)      
}

export default Movie;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58849254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档