私は反応が非常に新しいので、Rails apiからデータを取り込もうとしていますが、エラーTypeError: Cannot read property 'map' of undefined
が発生しています。
反応開発ツールを使用すると、状態を確認でき、$r.state.contacts
を使用してコンソールでそれをいじった場合に連絡先を確認できます。誰かが間違ったことを手伝ってくれますか?私のコンポーネントは次のようになります:
import React from 'react';
import Contact from './Contact';
class ContactsList extends React.Component {
constructor(props) {
super(props)
this.state = {}
}
componentDidMount() {
return fetch('http://localhost:3000/contacts')
.then(response => response.json())
.then(response => {
this.setState({
contacts: response.contacts
})
})
.catch(error => {
console.error(error)
})
}
render(){
return(
<ul>
{this.state.contacts.map(contact => { return <Contact contact{contact} />})}
</ul>
)
}
}
export default ContactsList;
未定義のプロパティ「マップ」を読み取れません、なぜですか?
_this.state
_は最初は_{}
_であり、_{}
_のcontacts
はundefinedになるためです。重要な点は、componentDidMountは最初のレンダリング後に呼び出され、最初のレンダリング中にそのエラーをスローすることです。
可能な解決策:
1- contacts
の初期値を次の状態の_[]
_として定義します。
_constructor(props) {
super(props)
this.state = {
contacts: []
}
}
_
2-またはmap
を使用する前にチェックを入れます:
_{this.state.contacts && this.state.contacts.map(....)
_
配列をチェックするには、Array.isArray(this.state.contacts)
を使用することもできます。
注:マップ内の各要素に一意のキーを割り当てる必要があります。[〜# 〜] doc [〜#〜]。