私はReactを学ぼうとしています。私はJavascriptに関しては初心者です。今、私はFlickrのAPIからデータを取得しているアプリケーションに取り組んでいます。問題は、Main.jsコンポーネントのプロップでマップメソッドを使用しようとすると、「Uncaught TypeError:this.props.photos.mapが関数ではない」というエラーが表示されることです。 Stackoverflowでここで検索した後、私は問題がthis.propsが配列ではなくjavascriptオブジェクトであると思います。問題は、それを配列にする方法を理解できないことです。誰も私が間違っていることを説明することはできますか?React .mapは関数ではありません
マイコード:
class App extends Component {
constructor() {
super();
this.state = {
}
}
componentDidMount() {
let apiKey = 'xxxxxxxxxxxxxxxxxx';
let searchKeyword = 'nature';
let url = `https://api.flickr.com/services/
rest/?api_key=${apiKey}&method=flickr.photos.
search&format=json&nojsoncallback=1&&per_page=50
&page=1&text=${searchKeyword}`;
fetch(url)
.then(response => response.json())
.then(data => data.photos.photo.map((x) => {
this.setState({
farm: x.farm,
id: x.id,
secret: x.secret,
server: x.server})
// console.log(this.state)
}))
}
render() {
return (
<div className="App">
<Header />
<Main img={this.state.photos} />
<Navigation />
</div>
);
}
}
export default class Main extends Component {
render() {
return(
<main className="main">
{console.log(this.props.photos)}
</main>
)
}
}
編集: なぜthis.props.img未定義の最初のですか?
Screen shot from console.log(this.props.img)
「写真」とは何ですか? 'map'は' Array'のメソッドです。 –
* 'Uncaught TypeError:this.props.photos.mapは関数ではありません。' 'というエラーが表示されます。' * 'this.props.photos.map'は引用符で囲まれたコードのどこにも表示されません。 'data.photos.photo.map'は、それを意味しましたか? –
別名: 'map'を呼び出していて、' map'コールバック内で 'setState'を呼び出していて値を返さないので、すべてのエントリを' undefined'にマッピングしています。あなたは 'map'の戻り値を使っていません(あなたは' then'からそれを返していますが、何もその約束を使用しないので、未使用になります)。ほとんどの場合、 'setState'を繰り返し呼び出すことはほとんどありません。 –