У меня есть родительский компонент, где я зацикливаюсь на массиве продуктов и отрисовываю дочерний компонент внутри. Дочерний компонент содержит кнопку, которая должна обновлять только некоторые значения этого компонента, без повторного рендеринга всего списка.
import React, { useState } from "react";
import { connect } from "react-redux";
import ListComponent from "./ListComponent";
import Search from "./search";
import Loader from "./../Loader";
// import { getProductList } from "../../redux/actions/index";
const mapStateToProps = state => {
return { list: state.product.productList, loading: state.product.loader };
};
const App = ({ list, loading }) => {
const [products, setProducts] = useState(list);
const handleButtonAction = data => {
let newProductList = list.map((v, i) => {
if (v.id === data.id) {
v.isInCatalogue = true;
}
return v;
});
setProducts(newProductList);
list = products;
};
return (
<div className="container-fluid">
{loading ? <Loader /> : ""}
<div className="row d-flex mt-5">
<div className="col-md-12 col-sm-12">
<Search />
</div>
<div className="col-md-12 col-sm-12">
<div className="row ">
{list.map((v, i) => {
if (v.isInCatalogue) {
v.iconClass = "fa fa-check text-success";
} else {
v.iconClass = "fa fa-plus";
}
return (
<div key={i} className="col-sm-6 col-md-4 mb-4 ">
<ListComponent
data={v}
handleButtonAction={handleButtonAction}
/>
</div>
);
})}
</div>
</div>
</div>
</div>
);
};
export default connect(mapStateToProps)(App);