絞り込み検索
Reactで絞り検索を実装する
挙動動画
ポイント
ポイントは、2つ。
1つめは、filterメソッドを利用する。 配列の中身を検索するメソッド。
検索ワードを、onChangeイベントで取得して、 filterメソッドで条件にヒットしたモノだけを配列で返してくれる。
2つめは、 初期の配列データ(initialTweets)と、 検索した後の配列データ(filterdTweets)を分ける。
表示したい配列データを1つだけだと、検索にヒットした配列をsetStateすると、初期の配列データがうわがかれてしまう為です。
ソース
※不要なコードは削除してます。
import React from "react" import Tweet from '../tweets/tweet' class Tweets extends React.Component { constructor(props) { super(props) this.state = { initialTweets: [], # 初期データ filterdTweets: [], # 検索にヒットしデータを value: '', image: '' } } #ここで初期データをセットする componentDidMount() { this.setState({ initialTweets: this.props.tweets, filterdTweets: this.props.tweets }) } # onChangeイベンントで検索ワードを取得する handleSearch(e) { const keyword = e.target.value const tweets = this.state.initialTweets const filterd_tweets = tweets.filter((tweet) => tweet.body.includes(keyword)) # filterメソッドで条件にあったデータを取得 this.setState({filterdTweets: filterd_tweets}) } render () { const { filterdTweets } = this.state return ( <div className="container"> <div className="row"> <div className="col-xs-7 main"> </div> <div className="tweets"> {filterdTweets.map((tweet) => <Tweet key={tweet.id} tweet={tweet}/>)} </div> </div> </div> </div> ); } } export default Tweets
参考記事
こちらの記事は、初期データをReact側で持っています。 私の記事は、Railsで初期のデータはpropsで取ってきています。