2 回答
TA贡献2051条经验 获得超10个赞
我解释一下上面关于computed
的评论吧
Vue是响应式的,这就意味着一个好的设计模式是只保存源数据,进一步的变换交给框架。换言之,就是不增加没有必要的状态。所以我的建议是把datafilter
放到computed
里面。
{
data() {
return {
datalist: [],
// filter就应该存filter,如果按原来的逻辑,应该叫filteredDataList
// 其实我更喜欢selectedDate,更加明确
// datafilter: null,
selectedDate: null,
}
},
computed: {
filteredDatalist() {
if (this.selectedDate) {
return this.datalist.filter(({ recoverTime }) => recoverTime === this.selectedDate);
}
else {
return this.datalist;
}
}
},
methods: {
getData() {
this.$get('接口地址', 请求参数)
.then(response => {
this.datalist = response
})
.catch(error => {
});
},
clickDay(date) {
var a = date.split('/');
// 用楼上的方式更优雅一些
this.selectedDate = a[0] + '-' + (a[1] < 10 ? '0' : '') + a[1] + '-' + (a[2] < 10 ? '0' : '') + a[2];
},
},
}
好处都有啥?谁说对了就给他
解开了计算过程和点击按钮的耦合。假如以后想要加上前一天/后一天的功能,只需要写日期加减本身的代码,不用再复制粘贴计算过程了;
解开了
datalist
生命周期的限制。假如以后想要加上datalist
实时更新的功能,只需要定时getData
就行了(或者用websocket,不论是啥),不需要用户触发clickDay
就能自动刷新;Vue会智能地管理
computed
属性的缓存,如果用户clickDay
两次都相同,只会计算一次。
其实这种思想已经很函数式了,相当像Rx。但是Vue的学习成本比Rx低得多,这么简单就能用上函数式,何乐不为?
TA贡献1802条经验 获得超4个赞
我就觉得这两句可以换一个优雅点的方式
var a = data.split('/');
var b = a[0] + '-' + (a[1] < 10 ? '0':'') + a[1]+'-'+ (a[2] < 10 ? '0':'')+a[2];
改为
// 如果你的数据结构是2018/07/26,为什么还要去判断加0,直接用replace替换不好吗
// data.replace(/\//g, '-')
// 加0写法
const b = `${a[0]}-${a[1].padStart(2, '0')}-${a[2].padStart(2, '0')}`;
添加回答
举报