Реквизиты не отображаются после отправленного действия - PullRequest
0 голосов
/ 16 мая 2018

Я создал два действия, которые сортируют товары по их цене, я назначил отсортированный массив для массива продуктов редукционного состояния, но когда я запускаю это действие, товары исчезают из компонента.

Я прочитал о componentWillReceiveProps и componentWillUpdate, но не могу понять, как его использовать ..

Вот действия:

// actions
    export const sortProductsByLowestPrice = () => (dispatch, getState) => {
          let products = getState().products.products.products;
          const isArray = Array.isArray(products);
          const sorted = products.slice().sort((a,b) => { return a.price > b.price})
          dispatch({
            type: SORT_PRODUCTS_BY_LOWEST_PRICE,
            payload: sorted
          })
          
    }


    export const sortProductsByHighestPrice = () => (dispatch, getState) => {
          let products = getState().products.products.products;
          const isArray = Array.isArray(products);
          const sorted = products.slice().sort((a,b) => { return a.price < b.price})
          dispatch({
            type: SORT_PRODUCTS_BY_HIGHEST_PRICE,
            payload: sorted
          })
    }

// rendering products 
  

  {this.props.products ? this.props.products.slice(0,5).map((product) => {
           return <ProductItem key={product._id} product={...product} />
              }) : null
    
    // click events
    <Button onClick={this.props.sortProductsByLowestPrice}>Lowest price</Button>
    <Button onClick={this.props.sortProductsByHighestPrice}>Highest price</Button>

Действия работают, они сортируются так, как должны, смотрите результат в логгере.

import React, {Component} from 'react';
import { PropTypes } from 'prop-types';

import { connect } from 'react-redux';
import { getProducts, sortProductsByLowestPrice, sortProductsByHighestPrice } from '../actions/productsActions';

import { Grid, Row, Button, Group, Loader } from 'semantic-ui-react';

import ProductItem from './ProductItem';

class ProductList extends React.Component {
  constructor(props) {
    super(props);
    
  }

  componentDidMount() {
    this.props.getProducts();
  }




  render() {
    
    return <div>
            <Button.Group className="buttonGroup">
                  <Button onClick={this.props.sortProductsByLowestPrice}>Lowest price</Button>
                  <Button onClick={this.props.sortProductsByHighestPrice}>Highest price</Button>
            </Button.Group>
            <div className="horizontal">
              {this.props.products ?
                 this.props.products.slice(0,5).map((product) => {
                return <ProductItem key={product._id} product={...product} />
                 }) : <Loader active inline />}
            </div>
           </div>
  }
}

ProductList.propTypes = {
  getProducts: PropTypes.func,
  products: PropTypes.array,
  sortProductsByLowestPrice: PropTypes.func,
  sortProductsByHighestPrice: PropTypes.func
}

const mapStateToProps = state => {
  return {
    products: state.products.products.products
 }
};

const mapDispatchToProps = (dispatch) => ({
    getProducts: () => dispatch(getProducts()),
    sortProductsByLowestPrice: () => dispatch(sortProductsByLowestPrice()),
    sortProductsByHighestPrice: () => dispatch(sortProductsByHighestPrice())
});



export default connect(mapStateToProps, mapDispatchToProps)(ProductList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...