Ich versuche, eine Suchfunktion zu machen, die den Namen der Personen rendert, die in einer Suchtexteingabe übereinstimmen.Reagieren Sie filtern den Zustand, ohne es zu ruinieren
Das Problem ist, dass ich den Status auf die Elemente setzen, die die Suche entsprechen, und dann der Anfangszustand verloren ist, so dass keine Suche mehr durchgeführt werden kann, da der Status leer sein wird. Wie kann ich den Zustand jedes Mal "auffüllen"?
Oder vielleicht gibt es einen anderen Weg, ohne tatsächlich den Zustand einzustellen, den ich nicht kenne.
Ich habe versucht, dies mit einem Versuch zu beheben, auf den Ausgangszustand zurückzusetzen, wenn die HandleSearch-Funktion direkt vor dem Filter aufgerufen wird, aber das funktioniert nicht.
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;
Komponente mit der Sucheingabe:
import React from 'react';
class Header extends React.Component {
render() {
return (
<header>
<input
type="text"
placeholder={this.props.tagline}
ref={(input) => this.searchInput = input}
onChange={() => this.props.handleSearch(this.searchInput.value)}
>
</input>
</header>
)
}
}
export default Header;
Wie kann ich meine Daten wie
[
{
"Name": "Adam",
"Born": 1971
},
{
"Name": "Bob",
"Born": 1999
},
etc etc for 20 more names