Здраствуйте! Есть код приложения написаного на React-е. Само приложение отображает список людей, также можно отфильтровать список кнопками или поисковым инпутом. Хочу научиться делать такие же приложения, а чтобы научиться стараюсь повторить реализацию....Я немножко изменил названия масивов и свойства в обьектах в файле today.json чтобы был список актеров и актрис. Для начала нужно хотя бы вывести список на страницу, а создавать фильтры буду позже, но у меня ошибка и список не отображается...
Вот песочница готового приложения:
https://codesandbox.io/s/eloquent-feather-dgwrq
А вот мой код:
Index.js:
import React from "react";
import ReactDOM from "react-dom";
import Content from "./Content.js"
class App extends React.Component {
state ={
data:[]
}
componentDidMount(){
this.fetchData();
}
fetchData = async () =>{
const response = await fetch('data/today.json');
const data = (await response.json()).body;
console.log(data);
this.setState({data:data});
console.log(data);
}
render(){
return(
<div>
<Content data={this.state.data}/>
</div>
);
}
}
ReactDOM.render(<App />, document.getElementById('root'));
Content.js:
import React from "react";
export default ({ data }) => (
<table className="table">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Film</th>
</tr>
</thead>
<tbody>
{data.map(item => (
<tr key={item.name}>
<td>{item.name}</td>
<td>{item.age}</td>
<td>{item.film}</td>
</tr>
))}
</tbody>
</table>
);
и мой today.json:
spoiler{
"body": {
"actor": [
{
"name": "Will Smith",
"age": 51,
"film": "Hancock"
},
{
"name": "Brad Pitt",
"age": 55,
"film": "Ocean's Twelve"
},
{
"name": "Zac Efron",
"age": 32,
"film": "17 Again"
}
],
"actress": [
{
"name": "Catherine Zeta-Jones",
"age": 50,
"film": "The Terminal"
},
{
"name": "Sandra Bullock",
"age": 55,
"film": "Speed"
},
{
"name": "Emma Watson",
"age": 29,
"film": "Harry Potter"
}
]
}
}
Ошибка:
Я думаю возможно это связано с тем, что мои массивы находятся в обьекте и получается что мы не можем использовать для обьекта метод filter. Но тогда возникает вопрос: почему в готовом приложении это работает? Там так же в компонент Tabledata передается аргументом { data } без всяких проверок типа:
props.data.body && props.data.body.actor
? props.data.body.actor
: props.data;
И все там работает... А почему у меня не работает? Ведь подход такой же использовал, код практически идентичный....Подскажите пожалуйста в чем проблема и как исправить ее...