[英]Filter products on enter Search input ReactJS
I have list of products.我有产品清单。 I want to display only products that have a description or name containing typed word by clicking enter on search
input
.我想通过单击搜索
input
上的输入来仅显示具有包含键入单词的描述或名称的产品。 So I tried this in my Search
component所以我在我的
Search
组件中尝试了这个
const Search = (props) => {
return (
<InputGroup className="container custom-input-group">
<FontAwesomeIcon icon={faSearch} className="icon" />
<FormControl
placeholder="Search"
type="text"
className="mr-sm-2"
onChange={(e) => props.onSearch(e.target.value)}
value={props.value}
/>
</InputGroup>
);
};
And this in my App
component这在我的
App
组件中
const App = (props) => {
const [cartProducts, setCartProducts] = useState([]);
const [products, setProducts] = useState(getProducts());
const [searchValue, setSearchValue] = useState();
const handleAddProductToCart = (productID) => {
console.log(productID);
setCartProducts([...cartProducts, productID]);
};
const handleRemoveFromCart = (productID) => {
const newCartProducts = cartProducts.filter((id) => id !== productID);
setCartProducts(newCartProducts);
};
const filterItems = ({ description, title }) => {
return title.toLocaleLowerCase().indexOf(searchValue.toLocaleLowerCase())
|| description.toLocaleLowerCase().indexOf(searchValue.toLocaleLowerCase())
}
return (
<>
<Header />
<Search onSearch={setSearchValue} value={searchValue} />
{products.filter(filterItems).map((product, id) => (
<Product key={product.id} {...product}/>
))}
<Sidebar />
{products.map((product) => {
const { id } = product;
let haveInCart = false;
cartProducts.forEach((productID) => {
if (productID === id) {
haveInCart = true;
}
});
return (
<Product
key={product.id}
product={product}
handleAddProductToCart={handleAddProductToCart}
/>
);
})}
<h2>Your Cart</h2>
{cartProducts.length > 0
? cartProducts.map((productID) => {
const productIndex = products.findIndex((product) => {
return product.id === productID;
});
let product = products[productIndex];
return (
<CartProduct
key={product.id}
product={product}
handleRemoveFromCart={handleRemoveFromCart}
haveInCart={true}
/>
);
})
: "Yor Cart is Empty :("}
</>
);
};
It's giving me SyntaxError.它给了我语法错误。 What am I doing wrong?
我究竟做错了什么?
Code sandbox https://codesandbox.io/s/cat-toys-n23m6?file=/src/App.jsx:275-2222代码沙箱https://codesandbox.io/s/cat-toys-n23m6?file=/src/App.jsx:275-2222
EDIT I found I was missing ))}
but it's still not working编辑我发现我失踪了
))}
但它仍然无法正常工作
Add an empty tag in your map function在您的 map function 中添加一个空标签
{
products.filter(filterItems).map((product, id) => (
<> {/* here */}
<Product key={product.id} {...product}/>
<Sidebar />
{
products.map((product) => {
const { id } = product;
let haveInCart = false;
cartProducts.forEach((productID) => {
if (productID === id) {
haveInCart = true;
}
});
return (
<Product
key={product.id}
product={product}
handleAddProductToCart={handleAddProductToCart}
/>
);
})
}
</> {/* here */}
))}
EDIT编辑
I have made changes to your code.我已对您的代码进行了更改。 Now it's your turn;)
现在轮到你了;)
Demo: stackblitz演示: stackblitz
I forked your sandbox.我分叉了你的沙箱。 Here's the code
这是代码
return (
<>
<Header />
<Search onSearch={setSearchValue} value={searchValue} />
{products.filter(filterItems).map((product, id) => (
<div>
<Product key={product.id} {...product} />
<Sidebar />
{products.map((product) => {
const { id } = product;
let haveInCart = false;
cartProducts.forEach((productID) => {
if (productID === id) {
haveInCart = true;
}
});
return (
<Product
key={product.id}
product={product}
handleAddProductToCart={handleAddProductToCart}
/>
);
})}
<h2>Your Cart</h2>
{cartProducts.length > 0
? cartProducts.map((productID) => {
const productIndex = products.findIndex((product) => {
return product.id === productID;
});
let product = products[productIndex];
return (
<CartProduct
key={product.id}
product={product}
handleRemoveFromCart={handleRemoveFromCart}
haveInCart={true}
/>
);
})
: "Yor Cart is Empty :("}
</div>
))}
</>
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.