一个列表过滤功能 过滤条件 name == searchValue
方案一
在connect
const mapStateToProps = ({itemStore}, ownProps) => {
const { searchValue, fullArr } = itemStore
const subArr = fullArr.filter(item => item.name.indexOf(searchValue) > -1)
return {
...itemStore,
subArr,
}
}
这样每次store或者ownProps发生变化时候遍历一次
优点是代码量少,逻辑简单
方案二
在每次搜索条件onChange的时候和在queryData的时候就根据搜索条件去setState或者dispatch去改变subArr
方案三
在componentWillReceiveProps时候进行操作
// 使用redux规定每次查询都返回一个新的list
componentWillReceiveProps(nextProps) {
const { searchValue, fullArr } = this.props
if(
nextProps.fullArr !== fullArr ||
nextProps.searchValue !== searchValue
){
const subArr = .....
this.setState({
subArr,
})
}
}
这样就性能比方案一好,但这显得componentWillReceiveProps有点臃肿
目前我采用的是方案三
大神们给个建议
保持组件简单,是我们毕生的追求,
性能也不是首先需要考虑方向
当我们需要精确的控制计算,来提高性能的时候。 可以使用reselect。
详情请参考blog为什么我们需要reselect