tengo mi proyecto de reacción redux, que quiero agregar una búsqueda al componente menuItems. pero parece que no puedo averiguar cómo buscar en el mapa existente. Creé una entrada con el evento onChange que establece el estado en el término de entrada. pero no sé qué hacer después de eso.
class MenuItems extends Component { state = { searchTerm: '', } handleclick = (item) => { this.props.deleteMenuItem(item.id); } handleSearch = (event) => { this.setState({ [event.target.name]: event.target.value }) } filteredItem = () => { let filtered = [...this.props.menuItems].filter(item => item.name === "burger") } render(){ let showItems = this.props.menuItems; return ( <div> <input placeholder="search" name="searchTerm" type="text" value={this.state.searchTerm} onChange={this.handleSearch} /> {showItems.map((item) =>( <li class="list" key={item.id}> {item.name} <br></br> {item.body} <br></br> <img src={item.image}></img> <br></br> <button id={item.id} onClick={() => this.handleclick(item)}>delete </button> </li> ))} </div> ) } } export default connect(null, {deleteMenuItem})(MenuItems)Parece que solo necesita filtrar con su término de búsqueda y funcionará bien.
class MenuItems extends Component { state = { searchTerm: "", }; handleclick = (item) => { this.props.deleteMenuItem(item.id); }; handleSearch = (event) => { this.setState({ [event.target.name]: event.target.value, }); }; render() { let showItems = this.props.menuItems; const filtered = [...this.props.menuItems].filter((item) => item.name.includes(this.state.searchTerm) ) ?? []; return ( <div> <input placeholder="search" name="searchTerm" type="text" value={this.state.searchTerm} onChange={this.handleSearch} /> {showItems.map((item) => ( <li className="list" key={item.id}> {item.name} <br></br> <button id={item.id} onClick={() => this.handleclick(item)}> delete </button> </li> ))} {filtered.map((item) => ( <li className="list" key={item.id}> Filtered: {item.name} <br></br> </li> ))} </div> ); } } const App = () => { return ( <div> <MenuItems menuItems={[{ name: "name1" }, { name: "name2" }]} /> </div> ); };