Как передать action в компонент Redux ReactJS

111
21 января 2021, 12:00

Пробую передать action addProduct в компонент но при клике пишет ошибку, помогите справиться, зарание спасибо!

import { connect } from "react-redux";
import { bindActionCreators } from "redux";
import { addProduct } from "../actions/addProduct";
const ProductListItem = ({ product }) => {
  return (
    <div className="product">
      <img className="product_img" src={product.image} />
      <p>{product.name}</p>
      <p className="bold">$ {product.price}</p>
      <button className="add_card" onClick={() => addProduct(product)}>
        {" "}
        add to cart
      </button>
    </div>
  );
};
export default ({ products = [] }) =>
  products.map((product, i) => {
    return <ProductListItem key={i} product={product} />;
  });

const mapDispatchToProps = dispatch => {
  return bindActionCreators({ addProduct }, dispatch);
};
connect(
  mapDispatchToProps
)(ProductListItem);
Answer 1

connect это HOC, который возвращает компонент обертку, подписаную на обновления store и опционально передающую в свойства вашего компонента нужные ключи хранилища и dispatch или обернутые в dispacth действия. Само собой, чтобы иметь доступ к этим данным в приложении надо использовать компонент обернутый в этот HOC:

const ProductListItem = ({ product }) => { /* ... */ };
const mapDispatchToProps = {
  addProduct,
};
const ConnectedProductListItem = connect(
   null,
   mapDispatchToProps,
)(ProductListItem); 
const ProductList = ({ products = [] }) => {
  return products.map((product, i) => (
    <ConnectedProductListItem key={i} product={product} />
  ));
};
export default ProductList;
Answer 2

function connect(mapStateToProps?, mapDispatchToProps?, mergeProps?, options?)

Первый аргумент mapStateToProps, второй mapDispatchToProps

connect(
  null,
  mapDispatchToProps
)(ProductListItem);
READ ALSO
navbar bootstrap не корректно работает на компьютере

navbar bootstrap не корректно работает на компьютере

Выгрузил проект на хостинг, заметил одну проблемуНавигационная панель не корректно работает, вот 2 ситуации:

94
Вывод определенных объектов из массива

Вывод определенных объектов из массива

Всем приветУ меня есть функция при нажатие на которую я хочу получать объекты из массива только первой категории

93
Flex: 3 элемента 1 по центру остальные по краям

Flex: 3 элемента 1 по центру остальные по краям

Пытаюсь сделать верстку на флексах, есть три контейнера разной шириныДва должны быть по краям и один по центру

146
Дублирование последнего числа в ListBox

Дублирование последнего числа в ListBox

Мне нужно считать все числа из файла в бинарном режиме (мне принципиально важно именно в этом режиме считывать числа) и добавить в ListBoxПо непонятной...

120