検索テキスト入力で一致する人物の名前を表示する検索機能を作成しようとしています。状態をフィルタリングせずにフィルタリングして反応させない
問題は、検索に一致する項目に状態を設定した後、最初の状態が失われて状態が空になるため、これ以上検索できなくなることです。だから、毎回どのように状態を「補充」するのですか?
実際に認識していない状態を実際に設定することなく、他の方法があるかもしれません。
フィルタの直前でhandleSearch関数が呼び出されても初期状態にリセットしようとしましたが、これはうまくいきませんでした。
import React from 'react';
import Header from './Header';
import peopleData from '../persons.json';
class App extends React.Component {
constructor(){
super();
this.handleSearch = this.handleSearch.bind(this);
this.state = {
people: peopleData
}
}
handleSearch(wordToMatch){
this.setState({ people: peopleData }); //Attempt to reset to initial state
const result = this.state.people.filter(d => {
const regex = new RegExp(wordToMatch, 'gi');
return d.Name.match(regex);
});
this.setState({ people: result })
}
render() {
const list = this.state.people.map((d, i) => <li key={i}>{d.Name}</li>);
return (
<div className="myApp">
<Header
tagline={"testing"}
handleSearch={this.handleSearch}
/>
<ul className="contentBody">
{list}
</ul>
</div>
)
}
}
export default App;
コンポーネント検索入力と:私のデータはhandleSearch
で
[
{
"Name": "Adam",
"Born": 1971
},
{
"Name": "Bob",
"Born": 1999
},
etc etc for 20 more names