当前位置: 首页 > news >正文

React-Diffing算法和key的作用

1.验证Diffing算法

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="test"></div>
    <script src="../js/17.0.1/react.development.js "></script>
    <script src="../js/17.0.1/react-dom.development.js"></script>
    <script src="../js/17.0.1/babel.min.js"></script>
    <!-- 对标签属性进行限制 -->
    <script src="../js/17.0.1/prop-types.js"></script>
    <script type="text/babel">
        class Time extends React.Component {
            state = { date: new Date() }
            componentDidMount() {
                setInterval(() => {
                    this.setState({ date: new Date() })
                }, 1000)
            }
            render() {
                return (<div>现在时间是{this.state.date.toTimeString()}
                    <input type="text" /></div>)
            }
        }
        ReactDOM.render(<Time />, document.getElementById('test'))
    </script>
</body>

</html>

在这里插入图片描述
这段代码是一个使用 React 编写的时钟组件,它会每秒更新一次当前时间并显示在页面上,输入框的数据始终没变,是因为Diffing算法
在这里插入图片描述

diffing 算法通过比较虚拟 DOM 树的差异,只更新实际 DOM 中发生变化的部分

2.key的作用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
若使用index作为key值:请看代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="test"></div>
    <script src="../js/17.0.1/react.development.js "></script>
    <script src="../js/17.0.1/react-dom.development.js"></script>
    <script src="../js/17.0.1/babel.min.js"></script>
    <!-- 对标签属性进行限制 -->
    <script src="../js/17.0.1/prop-types.js"></script>
    <script type="text/babel">
        class Person extends React.Component {
            state = {
                persons: [
                    { id: 1, name: "小李", age: 18 },
                    { id: 2, name: "小张", age: 19 }
                ]
            }
            add = () => {
                const { persons } = this.state
                const p = { id: persons.length, name: '小王', age: 20 }
                this.setState({ persons: [p, ...persons] })
            }

            render() {
                return (<div>
                    {this.state.persons.map((item, index) => <li key={index}>{item.name}, {item.age}</li>)}
                    <button onClick={this.add}>添加小王</button>
                </div>)
            }
        }
        ReactDOM.render(<Person />, document.getElementById('test'))
    </script>
</body>

</html>

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

http://www.dtcms.com/a/107424.html

相关文章:

  • 【AI论文】什么、如何、何处以及效果如何?大语言模型测试时缩放技术调研
  • Python扩展知识详解:map函数
  • Pinia持久化插件pinia-plugin-persistedstate
  • Ubuntu安装psql
  • 推导Bias² + Variance + σ²_ε
  • Java项目之基于ssm的校园驿站管理系统(源码+文档)
  • GO语言学习(16)Gin后端框架
  • Linux服务器环境下如何优化环境变量
  • DeepSeek 开源的 3FS 如何?
  • 【Pandas】pandas DataFrame info
  • 高速电路中的PCB及其完整性设计
  • AI的未来演进
  • ubuntu git cola gui
  • DecodeEX 功能揭秘:什么是“复制交易”?
  • Windows 10 如何设置右击鼠标快速进行“关机”
  • Java安全 - CC1链
  • 基于Spring Boot的社区互助平台的设计与实现(LW+源码+讲解)
  • 如何批量将带有GPS信息的照片导入奥维地图:完整指南
  • 园门打印机配置教程
  • 网络安全与防护策略
  • 基于Spring Boot的实验室课程管理系统的设计与实现(LW+源码+讲解)
  • LeetCode-547. 省份数量
  • 【求稳方案】基于树莓派+深度相机的慧眼识果完整实现方案
  • Scala-面向对象
  • xml文件中的gt;
  • 【Linux篇】探索进程地址空间:计算机背后的虚拟世界
  • 笔记2——网络参考模型
  • 前端JS高阶技法:序列化、反序列化与多态融合实战
  • 逆向工程核心原理-第二章-helloworld
  • 【一起来学kubernetes】34、ReplicaSet使用详解