【发布时间】:2017-11-16 02:04:25
【问题描述】:
我一直在使用来自lodash 的sortBy,但一直在使用
./src/components/Product.js
Syntax error: Unexpected token (17:29)
15 | sortByPrice() {
16 | this.setState(prevState => ({
> 17 | sortBy(prevState, ['price'])
| ^
18 | }));
19 | }
20 |
这是我的组件,我想在其中根据对象的价格对对象数组进行排序。 this.state 里面 return() 给了我一个数组,所以这似乎工作,我只需要让 sortByPrice() 工作
import React, { Component } from 'react'
import sortBy from 'lodash/sortBy'
import './Product.css'
import products from '../offers.json'
class Product extends Component {
constructor(props) {
super(props)
this.state = { products }
this.sortByPrice = this.sortByPrice.bind(this);
}
sortByPrice() {
this.setState(prevState => ({
sortBy(prevState, ['price'])
}));
}
render() {
return (
<div className="Product">
<a href="#" onClick={this.sortByPrice}>
Click me
</a>
<br />
{ products.map((product, index) =>
<div key ={index} className="card">
<img src={ product.product.details.image } alt={ product.product.details.ean }/>
<h3>Prijs: { product.price } Euro</h3>
<p>Staat: { product.description }</p>
<p>Verkoper: { product.user.details.firstname }</p>
</div>
)}
</div>
)
}
}
export default Product
更新
原来我试图在对象上调用sortBy(),这导致了错误。实现了这个并且错误消失了,现在我只需要找到一种方法来管理我的状态并重新渲染视图
this.setState(prevState => {
{ products: sortBy(prevState.products, ['price']) }
});
更新 2
在与一些朋友交谈后,我被建议完全放弃 lodash。我只是自己编写函数,将绑定添加到构造函数并在 ASC 和 DESC 按钮的 onClick 中调用函数。
import React, { Component } from 'react'
import './Product.css'
import products from '../offers.json'
class Product extends Component {
constructor(props) {
super(props)
this.state = { products }
this.sortByPriceAsc = this.sortByPriceAsc.bind(this);
this.sortByPriceDesc = this.sortByPriceDesc.bind(this);
}
sortByPriceAsc() {
this.setState(prevState => {
this.state.products.sort((a, b) => (a.price - b.price))
});
}
sortByPriceDesc() {
this.setState(prevState => {
this.state.products.sort((a, b) => (b.price - a.price))
});
}
render() {
return (
<div>
Sorteren:
<button onClick={this.sortByPriceAsc}>
ASC
</button>
<button onClick={this.sortByPriceDesc}>
DESC
</button>
<div className="product">
{ this.state.products.map((product, index) =>
<div key ={index} className="card">
<img src={ product.product.details.image } alt={ product.product.details.ean }/>
<h3>Prijs: { product.price } Euro</h3>
<p>Staat: { product.description }</p>
<p>Verkoper: { product.user.details.firstname }</p>
</div>
)}
</div>
</div>
)
}
}
export default Product
【问题讨论】:
-
sort 接受一个数组 -> 你给它一个包含数组的对象...
-
你说得对。