2017-04-25 122 views
0

我試圖過濾我地圖由:reviewId陣列中我的路由器(V4)的URL映射對象濾波基於陣營路由器

代碼工作,如果我手動設定到路由ID參數{review.items .filter(item => item.id === 2)`

{this.props.match.params.reviewId}還顯示routeId參數,但將它們放在一起不會顯示任何結果和控制檯錯誤。

路線

<Route exact path="/reviews/:reviewId" component={Review} /> 

JSON數據

const reviews = [ 
{ 
id: '1', 
cat: 'film', 
items: [ 
    { id: 1, name: 'Review 1', text: 'bla bla review 1', img: 'http://epn.tv/wp-content/themes/elecplay-2014/images/hexrotr/hexrotr_reviews_two_on.png' }, 
    { id: 2, name: 'Review 2', text: 'bla bla review 2' }, 
    { id: 3, name: 'Review 3', text: 'bla bla review 3' }, 
], 
}, 
{ 
id: '2', 
cat: 'music', 
items: [ 
    { id: 1, name: 'Review 1', text: 'bla bla review 1', img: 'http://epn.tv/wp-content/themes/elecplay-2014/images/hexrotr/hexrotr_reviews_two_on.png' }, 
    { id: 2, name: 'Review 2', text: 'bla bla review 2' }, 
    { id: 3, name: 'Review 3', text: 'bla bla review 3' }, 
], 
}, 
] 
export default reviews 

review.jsx

import reviews from '../Reviews/const' 

export default class Reviews extends React.Component { // eslint-disable- 
line react/prefer-stateless-function 

    static propTypes = { 
    match: React.PropTypes.node.isRequired, 
    } 

    render() { 
    const revs = reviews.map(review => 
     <div> 
    <div key={review.id} /> 
    {review.items.filter(item => item.id === this.props.match.params.reviewId) 
    .map(item => 
     <div className="cell"> 
     <div key={item.id}> 
      <img src={item.img} alt={item.name} /> 
      <div>{item.text}</div> 
     </div> 
     </div>, 
    )} 
    </div>, 
) 

return (
    <div> 
    {this.props.match.params.reviewId} 
    { revs } 
    </div> 
) 
} 
} 
+0

// eslint,禁止 - 線反應/喜歡無狀態功能 這都應該在同一行 - 它可以在你的代碼會導致一個錯誤。 –

回答

1

我認爲,這是一個類型不匹配的問題,this.props.match.params.reviewId將返回string值,並且id是integer值。

因此而不是===使用==

像這樣:

item.id == this.props.match.params.reviewId 

原因是:===檢查值和類型兩者。

爲了驗證這一點:

console.log(typeOf(this.props.match.params.reviewId), typeOf(item.id))

filter和檢查結果。

試試這個:

render() { 
    const revs = reviews.map(review => 
     <div> 
     <div key={review.id} /> 
     { 
      review.items.filter(item => { 
       console.log(typeOf(this.props.match.params.reviewId), typeOf(item.id)) 
       return item.id == this.props.match.params.reviewId; 
      }) 
      .map(item => 
      <div className="cell"> 
       <div key={item.id}> 
       <img src={item.img} alt={item.name} /> 
       <div>{item.text}</div> 
      </div> 
      </div> 
     )} 
     </div> 
) 
+0

要麼 - 要麼確保它們是相同的類型 - 一個可能是一個整數,而另一個可能是一個字符串。 –

+0

所以我傳遞的ID作爲一個整數和反應路由器期待一個字符串,我現在添加了一個'slug'給我的JSON數據'{id:2,slug'review-2'name:'Review 2' ,text:'bla bla review 2'},'並改變了'{review.items.filter(item => item.slug === this.props.match.params.reviewId)''現在可以工作了! –