フォームを持つ単純なステートフルコンポーネントがあります。React setStateは "オブジェクトをレンダリングできません"エラーを発生させます
export class example extends React.Component {
constructor() {
this.state = {
issue: {id: '', isValid: false}
}
this.onSubmit = this.onSubmit.bind(this)
}
onSubmit (e) {
fetch('/some/api/path').then((newIssue) => {
newIssue.json().then(convertedIssue => {
this.setState({issue: convertedIssue})
})
})
}
render() {
const issue = this.state.issue
return (
<div>
<form onSubmit={this.onSubmit}>
ID: {issue.id}
...
</form>
</div>
)
}
APIレスポンスを取得すると問題が発生します。レスポンスは、コンストラクタの状態を初期化した問題オブジェクトをマップする単純なオブジェクトです。私はsetState({issue: issue})
を呼び出すしようとすると、私はエラーを取得する:Uncaught (in promise) Error: Objects are not valid as a React child (found: Sun Nov 06 2016 16:00:00 GMT-0800 (PST)). If you meant to render a collection of children, use an array instead.
私はsetState({newIssue})
これはなぜあるのsetState({issue: newIssue})
からの呼び出しを変更することにより、このエラーを回避するハックすることができますか?私は間違って何をしていますか?
私は、「this.state.issue」を破棄し、そのデータをJSXで直接レンダリングします。それが原因だろうか? –
はい、エラーが発生します。だから、 'const {issue} = this.state'のようなもので、' {issue} 'をレンダリングしようとするとエラーが発生します。 'issue.id'のように表示したいissueを選択してください –
オブジェクト全体を見たいと思ったら、非構造化の後で' {JSON.stringify(issue)} 'をレンダリングすることができます。 –