前提・実現したいこと
ReactとDjangoでブログを作っています。
Django REST framework で作ったcomment APIにaxiosでコメントの一覧を引っ張ってくることに成功しました。
それは全ての記事につけられたコメントであるため、目的の記事につけられたコメントを抽出しなければなりません。
comment APIではtarget_postという値が決められており、どの記事につけられたコメントなのかを示します。
js
1if (item.target_post === this.props.articleID) return true;
これがfilterの条件です。
this.props.articleIDの値がundefinedになるためフィルターに1つもコメントが引っかかりません。
発生している問題・エラーメッセージ
プログラムは全く変えていませんが、うまくいくときとうまくいかないときがあります。
comment res.dataがapiからとってきたデータで、
this.state.commentがfilterにかけて残ったデータです。
####失敗
####成功
該当のソースコード
Comment.js
js
1import React from 'react'; 2import axios from 'axios'; 3 4import { Card } from 'antd'; 5 6class CommentComponent extends React.Component { 7 8 constructor(props) { 9 super(props); 10 this.state = { 11 comment: {}, 12 } 13 } 14 15 16 17 componentDidMount() { 18 console.log("this", this); 19 axios.get('http://127.0.0.1:8000/api/v1/comment') 20 .then(res => { 21 let commentData = res.data.filter((item, index) => { 22 console.log('comment res.data: ', res.data); 23 console.log('this.props.articleID: ', this.props.articleID); 24 if (item.target_post === this.props.articleID) return true; 25 }); 26 this.setState({ 27 comment: commentData 28 }); 29 console.log('this.state.comment: ', this.state.comment); 30 }) 31 } 32 33 render() { 34 return ( 35 <div> 36 <Card title=<h1>Comments</h1>> 37 <p 38 style={{ 39 fontSize: 14, 40 color: 'rgba(0, 0, 0, 0.85)', 41 marginBottom: 16, 42 fontWeight: 500, 43 }} 44 > 45 </p> 46 <Card 47 style={{ marginTop: 16 }} 48 type="inner" 49 title="Inner Card title" 50 > 51 Inner Card content 52 </Card> 53 <Card 54 style={{ marginTop: 16 }} 55 type="inner" 56 title="Inner Card title" 57 > 58 Inner Card content 59 </Card> 60 <Card 61 style={{ marginTop: 16 }} 62 type="inner" 63 title="Inner Card title" 64 > 65 Inner Card content 66 </Card> 67 </Card> 68 </div> 69 ); 70 } 71 72} 73 74export default CommentComponent; 75
ArticleDetailView.js
js
1import React from 'react'; 2import axios from 'axios'; 3 4import { Card } from 'antd'; 5import CustomForm from '../components/Form'; 6import CommentComponent from '../components/Comment'; 7 8class ArticleDetail extends React.Component { 9 10 state = { 11 article: {} 12 } 13 14 componentDidMount() { 15 const articleID = this.props.match.params.articleID; 16 axios.get(`http://127.0.0.1:8000/api/v1/${articleID}`) 17 .then(res => { 18 this.setState({ 19 article: res.data 20 }); 21 console.log('article res.data: ', res.data); 22 }) 23 } 24 25 render() { 26 console.log('this.state.article.id', this.state.article.id); 27 return ( 28 <div> 29 <Card title=<h1>{this.state.article.title}</h1>> 30 <p>{this.state.article.text}</p> 31 </Card> 32 <CommentComponent articleID={this.state.article.id}/> 33 <Card title=<h1>Add New Comment</h1>> 34 <CustomForm 35 requestType="post" 36 target_post={this.state.article.id}/> 37 </Card> 38 </div> 39 ); 40 } 41} 42 43export default ArticleDetail; 44
試したこと
渡す値をarticle.idからarticleに変えてもダメでした。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/24 13:09
2019/07/24 13:11