English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
微信小程序 wx:key Когда я учусь, не всегда明白到底是怎么回事,после исследования материалов в Интернете, собрал следующее:
Лично я считаю, что примеры, данные официальной документацией, не очень ясны, официальное объяснение是这样的:
wx:key
Если положение элементов списка будет динамически изменяться или если в список будут добавляться новые элементы, и если нужно, чтобы элементы списка保持了 свои характеристики и состояние (например, содержимое input, состояние выбора switch), необходимо использовать wx:key для указания уникального идентификатора элементов списка.
Значение wx:key предоставляется в двух формах
Строка, представляющая property item в массиве цикла for, значение этой property должно быть уникальным строкой или числом в списке и не должно изменяться динамически.
Сохранение ключевых слов *this означает, что в цикле for используется само значение item, такое представление требует, чтобы item был уникальной строкой или числом, например:
当数据改变触发渲染层重新渲染时,会校正带有 key 的组件,框架会确保它们被重新排序,而不是重新创建,以确保组
组件保持自身的状态,并且提高列表渲染时的效率。
如果未提供 wx:key,则会显示一个警告,如果明确知道该列表是静态的,或者不必关注其顺序,可以选择忽略。
示例代码:
<switch wx:for="{{objectArray}}" wx:key="unique" style="display: block;"> {{item.id}} </switch> <button bindtap="switch"> Switch </button> <button bindtap="addToFront"> Add to the front </button> <switch wx:for="{{numberArray}}" wx:key="*this" style="display: block;"> {{item}} </switch> <button bindtap="addNumberToFront"> Add to the front </button> Page({ data: { objectArray: [ {id: 5, unique: 'unique_5'}, {id: 4, unique: 'unique_4'}, {id: 3, unique: 'unique_3'}, {id: 2, unique: 'unique_2'}, {id: 1, unique: 'unique_1'}, {id: 0, unique: 'unique_0'}, ], numberArray: [1, 2, 3, 4] , switch: function(e) { const length = this.data.objectArray.length for (let i = 0; i < length; ++i) { const x = Math.floor(Math.random() * length) const y = Math.floor(Math.random() * length) const temp = this.data.objectArray[x] this.data.objectArray[x] = this.data.objectArray[y]} this.data.objectArray[y] = temp this.setData({ objectArray: this.data.objectArray , addToFront: function(e) { const length = this.data.objectArray.length this.data.objectArray = [{id: length, unique: 'unique_' + length}].concat(this.data.objectArray) this.setData({ objectArray: this.data.objectArray , addNumberToFront: function(e){ this.data.numberArray = [this.data.numberArray.length + 1].concat(this.data.numberArray) this.setData({ numberArray: this.data.numberArray
Вот мое личное понимание, если что-то не так, пожалуйста, исправьте: например, с <switch></switch>, если нет wx:key, при выборе одной из кнопок, изменении их порядка или добавлении вариантов, выбранная кнопка не будет следовать за изменением порядка предыдущей кнопки, она всегда будет на фиксированном месте, если есть wx:key, то наоборот, это подходит для списков или других тегов, которые могут изменять порядок или добавлять элементы
Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!