#reactjs #api
#reactjs #API
Вопрос:
- Фреймворк: реагировать
- Тип ошибки: result.map не является функцией
Я следую по книжному пути, чтобы изучить React, я попробовал приведенный ниже код с помощью hacker news API, он работал хорошо, но он не работает с этим API. Я не знаю, почему я получаю эту ошибку, пожалуйста, помогите.
Ссылка на мою песочницу —> https://codesandbox.io/s/react-setup-forked-q0hti?file=/src/App.js
import React, { Component } from "react";
// API chunks
const PATH_BASE = "https://jsonplaceholder.typicode.com/todos";
const PATH_SEARCH = "/search";
const PARAM_SEARCH = "query=";
const DEFAULT_QUERY = "redux";
//const url = `${PATH_BASE}${PATH_SEARCH}?${PARAM_SEARCH}${DEFAULT_QUERY}`;
//console.log(url);
class App extends Component {
constructor() {
super();
this.state = {
result: null
};
this.hitStories = this.hitStories.bind(this);
}
// handling the local state value
hitStories(result) {
this.setState({
result
});
}
// lifecycle method
// Note: componenetDidMount runs after the render method
componentDidMount() {
fetch(`${PATH_BASE}${PATH_SEARCH}?${PARAM_SEARCH}${DEFAULT_QUERY}`)
.then((response) => response.json())
.then((json_result) => this.hitStories(json_result))
.catch((error) => error);
}
render() {
console.log(this.state)
const { result } = this.state;
if (!result) {
return null;
}
return (
<div>
<h2>Fetch API in React</h2>
{result.map((
item
) => (
<div>
{item.title}
</div>
))}
</div>
);
}
}
export default App;
Комментарии:
1. На самом деле this.state.result является объектом, поэтому вы не можете перебирать его.
2.
result
переменная — это объект, а не массив. Вы должны изменить его на:Object.values(result).map((item) => (
, который создаст массив всех значений3. @szczocik благодарит, что исправлена ошибка, но она не отображает список заголовков (присутствует в api). Чего мне не хватает?
4. @YashMarmat, какова форма
item
, когда вы перебираете ее?5. @szczocik я просто использовал ее как случайную переменную, я дал ссылку на свою песочницу выше, надеюсь, это поможет решить мою проблему.
Ответ №1:
.map
используется для массива, your result
— это не массив, а объект. Попробуйте это:
render() {
const { result } = this.state;
return result ? (
<div>
<h2>Fetch API in React</h2>
{ Object.values(result).map((item) => (
<div>{item.title}</div>
))
}
</div>
): null;
}
Комментарии:
1. большое спасибо, это исправило ошибку, но она не отображает список заголовков (присутствует в api). Чего мне не хватает?