排序数组时如何正确使用getter
how to properly use getters when sorting array
所以我在使用 vuex getters 时遇到了问题。
我的目标是使用 getter myCartItems
通过 date
对作为对象数组的 cart
数据进行排序
我的问题是,在我的 Details
组件中推送第二个有效负载 {prod_id: 2, date: Wed Nov 03 2021 10:40:20}
后,道具 ['prod_id'] 正在记录 prod_id: 1
而不是 prod_id: 2
突变
addToCart: (state, payload) => {
state.cart.push(payload) // payload = {prod_id: 1, date: Wed Nov 03 2021 10:37:26}
}
getters
cartItems: (state) => {
return state.cart.slice().sort(
(a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()
);
},
html
<div v-for="(item,index) in cartItems" :key="index">
<Details :id="item.prod_id" />
</div>
使用索引作为 key
是你的问题,因为索引永远不会根据排序顺序改变。
最佳做法是使用唯一标识符,例如 prod_id
<div v-for="item in cartItems" :key="item.prod_id">
<Details :id="item.prod_id" />
</div>
所以我在使用 vuex getters 时遇到了问题。
我的目标是使用 getter myCartItems
date
对作为对象数组的 cart
数据进行排序
我的问题是,在我的 Details
组件中推送第二个有效负载 {prod_id: 2, date: Wed Nov 03 2021 10:40:20}
后,道具 ['prod_id'] 正在记录 prod_id: 1
而不是 prod_id: 2
突变
addToCart: (state, payload) => {
state.cart.push(payload) // payload = {prod_id: 1, date: Wed Nov 03 2021 10:37:26}
}
getters
cartItems: (state) => {
return state.cart.slice().sort(
(a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()
);
},
html
<div v-for="(item,index) in cartItems" :key="index">
<Details :id="item.prod_id" />
</div>
使用索引作为 key
是你的问题,因为索引永远不会根据排序顺序改变。
最佳做法是使用唯一标识符,例如 prod_id
<div v-for="item in cartItems" :key="item.prod_id">
<Details :id="item.prod_id" />
</div>