珠宝设计网站,哪个模板建站好,免费软件下载破解版,江油建设局网站原文链接#xff1a;https://blazor-university.com/components/render-trees/optimising-using-key/使用 key 优化源代码[1]提示#xff1a; 对于在运行时循环生成的组件#xff0c;始终使用 key。前面的示例运行良好#xff0c;因为 Blazor 能够轻松地将虚拟 DOM 元素与浏… 原文链接https://blazor-university.com/components/render-trees/optimising-using-key/使用 key 优化源代码[1]提示 对于在运行时循环生成的组件始终使用 key。前面的示例运行良好因为 Blazor 能够轻松地将虚拟 DOM 元素与浏览器 DOM 中的正确元素匹配当元素匹配成功时使用更少的更改更容易更新它们。但是当重新排列元素时这变得更加困难。以用户 ID 卡列表为例。使用增量渲染树证明[2]作为起点编辑 /Pages/Index.razor 并输入以下标记。page /h1Hello, world!/h1Welcome to your new app.
button onclickChangeDataChange data/buttonstyle.card-img-top {width: 150px;height: 150px;}
/style
olforeach (Person person in People){li classcardimg classcard-img-top srchttps://randomuser.me/api/portraits/men/(person.ID).jpg /div classcard-bodyh5 classcard-titleperson.GivenName person.FamilyName/h5p classcard-textperson.GivenName person.FamilyName has the id person.ID/p/div/li}
/olcode {ListPerson People new ListPerson{new Person(1, Peter, Morris),new Person(2, Bob, Monkhouse),new Person(3, Frank, Sinatra),new Person(4, David, Banner)};void ChangeData(){var person People[0];People.RemoveAt(0);People.Add(person); }class Person{public int ID { get; set; }public string GivenName { get; set; }public string FamilyName { get; set; }public Person(int id, string givenName, string familyName){ID id;GivenName givenName;FamilyName familyName;}}
}该页面与之前显示简单整数列表时的页面基本相同但现在有以下更改。第 46 行定义了一个名为 Person 的新类。注意 这个新类通常在它自己的源文件中但为了简单起见在这个例子中被放置在行内。第 32 行定义一个名为 People 的私有成员并添加两个项目以显示在视图中。第 40 行删除列表开头的人员并将其添加到列表末尾。第 15 行 将人员列表呈现为 Bootstrap 提示卡。现在运行应用程序。单击设置值按钮并检查列表中的元素我们将看到如下内容olli classcard originalValue Peter Morris Peter Morris has the id 1...Html for Peter Morris/lili classcard originalValue Bob Monkhouse Bob Monkhouse has the id 2...Html for Bob Monkhouse/lili classcard originalValue Frank Sinatra Frank Sinatra has the id 3...Html for Frank Sinatra/lili classcard originalValue David Banner David Banner has the id 4...Html for David Banner/li
/ol但是当我们单击更改数据按钮然后再次检查元素时我们看到尽管数据中的元素是相同的只是重新排序但 HTML 中的所有元素都已更新。从 originalValue 表示该元素先前持有的人这一事实可以明显看出这一点这意味着必须更新许多子元素才能显示正确的 HTML 标记。olli classcard originalValue Peter Morris Peter Morris has the id 1...Html for Bob Monkhouse/lili classcard originalValue Bob Monkhouse Bob Monkhouse has the id 2...Html for Frank Sinatra/lili classcard originalValue Frank Sinatra Frank Sinatra has the id 3...Html for David Banner/lili classcard originalValue David Banner David Banner has the id 4...Html for Peter Morris/li
/ol这些更改的增量如下所示元素 11.jpg 2.jpgPeter Morris Bob Monkhouse元素 22.jpg 3.jpgBob Monkhouse Frank Sinatra元素 33.jpg 4.jpgFrank Sinatra David Banner元素 44.jpg 1.jpgDavid Banner Peter MorrisHTML 元素已针对每个人进行了更改。如果 Blazor 能够检测到元素何时重新排列那就更好了。这样当数据重新排列时从 Virtual DOM 到浏览器 DOM 的 delta 变化也将是一个简单的重新排列。使用key 识别元素这正是 key 指令的用途。编辑第 17 行更改 li class”card” 并添加一个键如下所示li classcard keyperson运行应用程序。单击设置值按钮。单击更改数据按钮。右键单击列表中的第一项并检查该元素。现在我们不会看到元素 1 包含 person 2 的内部 HTML而是看到内部 HTML 完全保持原样并且元素已简单地重新排列。olli classcard originalValue Bob Monkhouse Bob Monkhouse has the id 2...Html for Bob Monkhouse/lili classcard originalValue Frank Sinatra Frank Sinatra has the id 3...Html for Frank Sinatra/lili classcard originalValue David Banner David Banner has the id 4...Html for David Banner/lili classcard originalValue Peter Morris Peter Morris has the id 1...Html for Peter Morris/li
/ol显然当您希望重新排列数据或从列表末尾以外的任何位置添加/删除任何项目时在您从列表中呈现项目时使用 key 指令是有利的。用于 key 的值可以是任何类型的对象。我们可以使用 Person 实例本身或者如果列表中的实例会发生变化那么我们可以使用 Person.ID 之类的东西。参考资料[1]源代码: https://github.com/mrpmorris/blazor-university/tree/master/src/RenderTrees/OptimisingUsingKeys