javascript - 分派动作后不显示道具
问题描述
我创建了两个根据价格对产品进行排序的操作,我将排序数组分配给 redux 状态产品数组,但是当我触发操作时,产品从组件中消失了。
我读过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);
解决方案
推荐阅读
- machine-learning - Tidymodels(在 R 中使用 10 倍交叉验证拟合袋装树):x Fold01:模型:错误:输入必须是向量,而不是 NULL
- mysql - 在MYSQL中用空格分割字符串
- asp.net-core - 如何在 ASP.NET Core 3.1 中重新加载动态配置的重写选项
- python - 如何在 tkinter 文本框中使用带有 html 标签的文本,或更改它以使其在 tkinter 标签中工作?
- javascript - 重叠元素中的 onClick 事件传播
- python - pandas 使用 groupby 和基于值的过滤器
- python - 在python(使用bs4)中跨多个非统一表返回数据的一次迭代?
- ruby-on-rails - Rails 服务器在开发模式下工作,但不在生产模式下
- javascript - 简单的 Web 脚本无休止地运行,而不是只运行一次
- sharepoint-online - Microsoft Graph API:更新 DocumentLibrary 中文件元数据的 PATCH 导致 409 响应;代码:resourceModified