Voici un aperçu de ce que j'ai essayé jusqu'à présent :
Fonction de filtrage des données
function filterData(searchText, restaurants) { const filterData = restaurants.filter((restaurant) => restaurant.info.name.includes(searchText) ); return filterData; }
import { restruntList } from "../constants"; // JSON数据 const Body = () => { const [searchText, setSearchText] = useState(""); const [restaurants, setRestaurants] = useState(restruntList); return ( <> <div className="search-container"> <input type="text" className="search-input" placeholder="搜索" value={searchText} onChange={(e) => { setSearchText(e.target.value); }} /> <button className="search-btn" onClick={() => { //过滤数据 const data = filterData(searchText, restaurants); //更新状态 - restaurant变量 setRestaurants(data); }} > 搜索{" "} </button> </div> //UI <div className="restrunt-list"> {restruntList.map((restaurant) => { return <RestruntCard {...restaurant.info} key={restaurant.info.id} />; })} </div> </> ); };
format de données restrunList JSON
export const restruntList = [ { info: { id: "23719", name: "麦当劳", cloudinaryImageId: "ee5f8e06b300efc07c9fe3f4df40dfc4", locality: "JM Road", areaName: "Shivajinagar", costForTwo: "₹400 for two", cuisines: ["汉堡", "饮料", "咖啡馆", "甜点"], avgRating: 4.3, } } ]
Sur la base du code et de la description que vous avez fournis, cette approche semble généralement correcte, mais il existe un petit problème dans la façon dont elle gère la fonction de filtrage des données et les données du restaurant.
Le principal problème est la façon dont vous gérez le filtrage et la mise à jour du statut. Étant donné que les mises à jour d'état de React sont asynchrones et ne se produisent pas immédiatement après l'utilisation directe de
searchText
值来过滤restaurants
可能无法得到预期的结果。状态更新可能在设置searchText
, vous risquez d'obtenir des résultats filtrés incohérents ou obsolètes.Pour résoudre ce problème, vous pouvez profiter de
useEffect
钩子在searchText
Mettre à jour les données du filtre lorsqu'elles changent. De cette façon, la fonction de filtre fonctionnera toujours sur le dernier état. Voici le code mis à jour :Changements de code :
restaurants
更改为filteredRestaurants
pour éviter toute confusion entre les données brutes et filtrées.useEffect
钩子来处理searchText
filtre sur le changement. Cela garantit des mises à jour correctes des données filtrées.Maintenant, lorsque vous tapez dans la zone de saisie de recherche, le filtrage devrait prendre effet immédiatement et la liste des restaurants devrait être mise à jour en conséquence.