【发布时间】:2021-03-08 08:27:58
【问题描述】:
我对反应真的很陌生,我不了解一些事情(也在重新思考之后)。因此,我将在这里提出我的问题。在此之前,我想为我糟糕的英语和可能愚蠢的问题道歉。
我有一个 js 类,在其中调用我的 API 和一个 Component 类,它应该代表数据。我导出函数,它调用 API 和数据并将其导入“index.js”,并将其作为我的 Component 类作为道具。
我的第一个问题是,我的 API 的函数返回正确的值(一个数组),但是当我在组件中调用此函数时,它返回未定义。
API.js:
const BASE_URL = "https://ghibliapi.herokuapp.com";
const encodeSpaces = (text) => text.replace(/ /g, "%20");
let cache;
function getMovies2() {
fetch(`${BASE_URL}/films`).then(response => response.json())
.then(movies => {
cache = movies;
console.log(movies);
return movies;
}).catch((e) => {
console.log("Api Call failed");
});
// return movies;
}
//copied and not written by me
function getMovies() {
if (cache !== undefined) return Promise.resolve(cache);
return fetch(`${BASE_URL}/films`)
.then((response) => response.json())
.then((movies) =>
movies.map((movie) => {
movie.urlEncodedTitle = encodeSpaces(movie.title);
return movie;
})
)
.then((movies) => {
cache = movies;
return movies;
});
}
//copied and not written by me
function getMovieByTitle(title) {
if (cache !== undefined)
return Promise.resolve(cache.find((movie) => movie.title === title));
title = encodeSpaces(title);
return fetch(`${BASE_URL}/films?title=${title}`)
.then((response) => response.json())
.then((data) => data[0])
.then((movie) => {
movie.urlEncodedTitle = encodeSpaces(title);
return movie;
});
}
export { BASE_URL, getMovies, getMovieByTitle, getMovies2};
Index.js:(里面有组件)
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import {Container} from 'react-bootstrap';
import {getMovies2} from './API/callAPI';
import reactDom from 'react-dom';
import { isCompositeComponentWithType } from 'react-dom/test-utils';
class RenderMovies extends React.Component {
constructor(props) {
super(props);
}
render() {
var renderedOutput = [];
Promise.resolve(this.props.movie).then(()=> {
console.log(this.props.movie);
});
// if(movie===undefined) {
// console.log("nix");
// return <div><p>API Fheler!</p></div>;
// } else{
// console.log(movie);
// }
// Promise.resolve(movie).then((movie) =>{
// console.log("Hello");
// renderedOutput = movie.map((item) => {
// console.log(item.title);
// return <div>{item.title}</div>;
// });
// });
return(
<div><p>{renderedOutput}</p></div>
);
}
}
ReactDOM.render(
<RenderMovies movies={getMovies2()}/>,
document.getElementById('root')
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
reportWebVitals();
(注释掉的代码只是测试)。 此外,我有 2 个问题。第一:为什么我的 getMovies2() 的返回类型是 void(当你将鼠标悬停在函数上时你可以看到它)第二:正如你看到的 getMovies() 函数返回一个 Promise,我的问题是,什么值当我解决 Promise 时,我会在调用函数时得到。
【问题讨论】:
标签: javascript reactjs api rest