javascript - Vue列表排序后不重新渲染 "properly"

标签 javascript sorting vue.js

下面的排序逻辑非常简单:
1. 标记不包含所选排序值的产品
2. 按所选排序值的数量降序对产品进行排序
3.隐藏不包含所选排序值的产品

我添加了简单的排序逻辑,它可以对元素进行排序(可以在控制台中预期)

当前问题:
列表呈现到页面的方式实际上并不显示新的顺序,而是仅修改少数项目的顺序。

Codepen 中的实际代码

有人可以建议什么是一种更有效的方法来实现功能,同时根据新的排序顺序正确地“重新定位”页面上的元素。

P.S:例如,如果您选择iron,则可以看到控制台中的输出与呈现到页面的列表项顺序不匹配

最佳答案

您在 html 代码中迭代以呈现产品列表的 products 属性不是可观察的。 Vue 仅跟踪可观察的属性,并在每次任何一个可观察的更改时重新渲染。即使您正在更改产品的顺序,Vue 也不会意识到这种变化,因为它不是可观察的。为了使 products 属性成为可观察的,将其添加到 data 属性中,就像添加营养物质并将其初始化为空数组一样。

将数据字段设置为如下所示:

data: {
  nutrients: nutrients,
  products: []
}

参见this为了更好地理解 Vue 的 react 系统的工作原理。

关于javascript - Vue列表排序后不重新渲染 "properly",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56515840/

相关文章:

arrays - 按字母顺序添加到字符串数组

javascript - 在计算方法中显示混合数组

javascript - 无法将带有 SnapSVG 的元素添加到我的页面

javascript - 使用干净的 Vue.js 进行表单验证

javascript - Promises.js - 我做得对吗?

c - 在 C 中创建 double 并将它们插入排序数组的循环

javascript - jQuery hide() 和 show() 没有按预期工作

javascript - 如何在 vue.js 中对计算属性进行排序

javascript - Nuxt.js 和 Vue-i18next : Error: Cannot resolve "vue-i18next"

css - 如何覆盖 Vue 组件中的作用域样式?