2017-11-10 10 views
0

ボタンをクリックすると、配列オブジェクトをフィルタリングしてリフレッシュします。ここに私のコードは次のとおりです。​​アクションが発生したときに配列オブジェクトをフィルタリングしてリフレッシュする方法

handleClick (event) { 
     event.preventDefault() 
     var el = event.target 

     if (el.name === 'diploma') { 
      this.setState({activeIndex: true}) 
      this.state.results.filter((el) => 
       el.title.toLowerCase().indexOf('diploma') > -1 
      ); 
     } else { 
      this.setState({activeIndex: false}) 
      this.state.results.filter((el) => 
       el.title.toLowerCase().indexOf('management') > -1 
      ); 
     } 
    } 

    fetchAPI(url) { 
     return fetch(url) 
      .then((response) => { 
       if (response.status >= 400) { 
        throw new Error('Bad response from server'); 
       } 
       return response.json(); 
      }); 
    } 

    componentDidMount() { 
     const that = this; 
     const url = 'https://d1zh5hbzybtmpd.cloudfront.net/api/app/category/' + that.props.categoryId; 


     that.fetchAPI(url).then((data) => { 
      that.setState({ 
       result: data.category, 
       results: data.courses.courses 
      }); 
     }); 
    } 

render({ }, { result={}, results=['', '', '', '', '', '', '', '', '', ''] }) { 
     return (

リストが更新されていません。それを修正する方法を教えてください。ありがとう。あなたを有効にするresultsの状態を設定する必要が

handleClick (event) { 
    event.preventDefault() 
    var el = event.target 

    if (el.name === 'diploma') { 
     this.setState({ 
      activeIndex: true, 
      results: this.state.results.filter(el => el.title.toLowerCase().indexOf('diploma') > -1) 
     }); 
    } else { 
     this.setState({ 
      activeIndex: false, 
      results: this.state.results.filter((el) => el.title.toLowerCase().indexOf('management') > -1); 
     }) 

    } 
} 
+1

'.filter()'は新しい配列を返しますが、呼び出された配列は変更されません。 – nnnnnn

答えて

0

1

私は、あなたには、いくつかのオブジェクトをフィルタリングしたいだけSETSTATE({newResults結果を})とします。しかし、あなたのコードは場合によってはうまくいくかもしれませんが、一貫していないので、通常はコールバックの状態変数を変更することはお勧めできません。

handleClick (event) { 
    event.preventDefault() 
    var el = event.target 

    if (el.name === 'diploma') { 
     const newResults = this.state.results.filter((el) => 
      el.title.toLowerCase().indexOf('diploma') > -1 
     ); 
     this.setState({activeIndex: true, results: newResults}); 
    } else { 
     const newResults = this.state.results.filter((el) => 
      el.title.toLowerCase().indexOf('management') > -1 
     ); 
     this.setState({activeIndex: false, results: newResults}); 
    } 
} 
関連する問題