lit-element - LitElement 等效于 React “key” 概念
问题描述
<example name="One"></example>
<example name="Two"></example>
<example name="Three"></example>
下一个渲染看起来像这样:
<example name="Four"></example>
<example name="Three"></example>
LitElement 将删除最后一个元素并使用新属性更新前两个元素。
如何更改此设置,以便 LitElement 删除除第一个位置之外的所有元素name="three"
,并在第一个位置创建一个新元素name="Four"
?
使用 React,这将通过给它们一个关键属性来实现。我想使用 LitElement 实现相同的结果。
<example key="1" name="One"></example>
<example key="2" name="Two"></example>
<example key="3" name="Three"></example>
解决方案
为此,您要使用 lit-htmlrepeat
指令。从文档:
repeat 指令根据用户提供的键执行有效的列表更新:
repeat(items, keyFunction, itemTemplate)
在哪里:
items
是一个数组或可迭代的。keyFunction
是一个将单个项目作为参数并返回该项目的保证唯一键的函数。itemTemplate
是一个模板函数,它将项目及其当前索引作为参数,并返回一个TemplateResult
.例如:
const employeeList = (employees) => html` <ul> ${repeat(employees, (employee) => employee.id, (employee, index) => html` <li>${index}: ${employee.familyName}, ${employee.givenName}</li> `)} </ul> `;
如果对
employees
数组重新排序,该repeat
指令会重新排序现有的 DOM 节点。
要使用repeat
,您需要从 lit-html 导入它:
import {repeat} from 'lit-html/directives/repeat';
推荐阅读
- android - 设计 - 使用 com.github.mikephil.charting
- vue.js - vue 的 vue-dat-gui 不适用于“无法读取未定义的属性 '_c'”错误消息
- npm - 如何解决 npm install 的错误代码 1
- javascript - Chrome.storage.sync.get 在另一个 .js 文件中
- flutter - Flutter 中的 const 构造函数和 const 对象
- javascript - 在多个画布的 p5js 实例模式下,未定义 p5 对象
- c# - 为什么 File.ReadAllLinesAsync 会阻止 WPF 中的 UI 线程?
- orleans - 奥尔良谷物的一对多组合
- c# - 具有不同分辨率后缀的剧集标题的正则表达式匹配
- c# - 如何将 ListView 中的图像定位在列的左侧?