我了解到,在呈现列表项时,Reaction会查看它们的键是否从先前的呈现中更改,因此它只重新呈现更改后的项.这种方式节省了渲染时间,并在长列表和复杂应用程序的情况下提供了性能优势.

我有一个例子,我在一个列表中有3个具有唯一键的项目. 我只是在改变他们在列表中的出现顺序. 在这种情况下,呈现逻辑如何工作.因为我用相同的值和相同的键呈现了相同数量的元素.实际上,项的关键字值没有变化,因为它们是唯一的.

import React, { useState } from 'react';
const colors = [
  { id: '1abc', name: 'Green' },

  { id: '2pqr', name: 'Blue' },
  { id: '3xyz', name: 'Red' },

];

function ListItems() {
  return (
    <ul>
      {colors.map((item, index) => (
        <li key={item.id}>{item.name}</li>
      ))}
    </ul>
  );
}

下一次,假设我将 colored颜色 数组更改为交换了第二个和第三个元素:

 const colors = [
  { id: '1abc', name: 'Green' },
  { id: '3xyz', name: 'Red' },
  { id: '2pqr', name: 'Blue' },

 ];

在这种情况下,呈现逻辑如何工作?

谢谢

推荐答案

每个元素的密钥都保持不变,只是您重新排序了. Reaction使用关键字来确定哪些元素已更改,需要重新渲染.

它只会根据数组中项目的新顺序的匹配来重新排序DOM元素,而不是重新呈现它们.

了解Reaction->的内部工作原理;

  1. 它与旧的和新的列表不同
  2. 它看到的键都是一样的,但顺序不同.
  3. 它对DOM node 重新排序,而不进行任何重新呈现.

检出react.devthis个例子,并解决同一篇文章的swap two form fields个挑战,以更好地理解这个概念.

Reactjs相关问答推荐

为什么安装FLOBIT后,所有的输入FIELD现在都有一个蓝色的轮廓?

值在返回页面时不更新,即使我已经更新了它们

使用下一步中的路由/导航不会立即加载路由

在Reaction中单击并显示子组件延迟/动画

如何从Reaction-Arborist树获取排序数据

根据用户 Select 的注册类型更改表单字段

在迭代状态时无法读取未定义的属性(读取 map )

React-apexcharts 中的 Y 轴刻度不会动态更新符号

useEffect内部的RETURN语句在首次按钮点击事件中似乎无效的原因是什么?

使用jest如何覆盖对象的模拟?我正在使用`jest.mock()`来模拟对象,并希望 for each 测试用例覆盖模拟.

在添加了useplacesautocomplete后,在构建React/Next.js项目时,NPM抛出类型期望的错误

如何在 React 过滤器中包含价格过滤器逻辑?

在 CrafterCMS Studio 中拖动字段

React 组件列表中的第一个计时器正在获取值 NaN

我应该如何将字符串作为props 传递给 React 组件?

顶点图表甜甜圈项目边框半径

来自一个自定义 React Native 组件的样式从另一个自定义组件移除样式

如何定制 React 热 toastr ?

如果查询不存在,如何返回所有产品?

在 React 中使用使用状态挂钩合并两个数组