reactjs - React.JS Map 数据使用 Hooks useState 在页面加载时设置数据
问题描述
我正在将数据从 App 传递到我的 Store 组件...当页面加载时,我试图使用 useState 来显示当前产品,以便稍后进行过滤。当我对此使用 useEffect 时,我得到了一个奇怪的 OBJ 返回,我不确定我做错了什么......
当我在函数 filterBrand() 和 filterSize() 中尝试使用 console.log(storeItems) 时,我得到了第二个/第三个 OBJ 的控制台日志。不知道如何过滤,老实说,我第一次看到...尝试学习最佳实践,所以请随时提供解释/示例!谢谢 :)
import React, { useState, useEffect } from "react";
import StoreItems from "./StoreItems.jsx";
import Filter from "../Filters/Filter";
const Store = ({ products, onAddToCart }) => {
const [storeItems, setStoreItems] = useState([]);
const [productSize, setProductSize] = useState("");
const [productBrand, setProductBrand] = useState("");
const [productCount, setProductCount] = useState(0);
useEffect(() => {
console.log(products)
const allProducts = products.map((product, i) => {
return (
<StoreItems key={i} product={product} onAddToCart={onAddToCart} />
);
})
console.log(allProducts)
setStoreItems(allProducts)
console.log(storeItems)
}, [])
const filterBrand = (event) => {
setProductBrand(event.target.value)
console.log(event.target.value)
console.log(storeItems)
}
const filterSize = (event) => {
setProductSize(event.target.value)
console.log(event.target.value)
console.log(storeItems)
}
return (
<main className="storeContent">
<Filter products={products} productSize={productSize} productBrand={productBrand} productCount={productCount} filterBrand={filterBrand} filterSize={filterSize} />
<div className="productContainer">
{storeItems}
</div>
</main>
);
};
export default Store;
发布它返回的屏幕截图
第一个控制台日志是 console.log(products)
第二个是 console.log(allProducts)
第三个是 console.log(storeItems)
解决方案
const filterBrand = (event) => {
setProductBrand(event.target.value)
let filteredProduct = products.filter(product => product.name.includes(event.target.value));
setStoreItems(filteredProduct);
setProductCount(filteredProduct.length)
if (event.target.value === "All") {
setStoreItems(products)
};
}
const filterSize = (event) => {
setProductSize(event.target.value)
let filteredSize = products.filter(product =>
product.name.includes(event.target.value));
setStoreItems(filteredSize);
setProductCount(filteredSize.length)
if (event.target.value === "All") {
setStoreItems(products)
};
}
这些似乎适用于过滤和productCount ...
仍在试图弄清楚为什么这会返回 0 个产品
const renderProducts = () => {
return storeItems.map((product, i) => {
console.log(product)
return (
<StoreItems key={i} product={product} onAddToCart={onAddToCart} />
);
})
}
推荐阅读
- react-native - React Native Custom TextInput 对象在每个字符后失去焦点
- spring-boot - 如何从 Spring-data-rest 中选择 PATCH 操作中要更新的属性?
- vb.net - 从excel表中计算单个人的元素 - vb .net
- c++ - stb_png_to_mem 的参数是什么意思?
- powershell - Powershell 将 $source memberof 复制到目的地,而不复制 $destination 的现有成员资格和附加过滤器
- html - Microsoft Edge 中的 HTML 视频元素 - 绿框问题
- python - 如何在 python 中使用 Kivy 放大特定点
- anychart - AnyChart - 柱形图:获取汇总的一个类别的值
- python - Python pivot:传播列不起作用
- ios - 带有 XCUItest 驱动程序的 Appium 会为我创建 xcuitest 脚本吗?