react入门学习---Todolist的实现(便签输入增删)

2023-11-15

1.学习react和vue的区别

主要学习了react的数据渲染方式,这和vue差别很大;

数据是否可变

React:整体是函数式的思想,在react中,是单向数据流,推崇结合immutable来实现数据不可变。
Vue:的思想是响应式的,也就是基于是数据可变的,通过对每一个属性建立Watcher来监听,当属性变化的时候,响应式的更新对应的虚拟dom。

编译&写法

React:思路是all in
js,通过js来生成html,所以设计了jsx,还有通过js来操作css,社区的styled-component、jss等。
Vue:把html,css,js组合到一起,用各自的处理方式,Vue有单文件组件,可以把html、css、js写到一个文件中,html提供了模板引擎来处理。

重新渲染和优化

当你比较React和Vue时,速度不能成为决定哪个更好的重要比较因素。在性能方面,让我们考虑重新渲染功能。当组件的状态发生变化时,React的机制会触发整个组件树的重新呈现。您可能需要使用额外的属性来避免不必要地重新渲染子组件。虽然Vue的重新渲染功能是开箱即用的,但Vue提供了优化的重新渲染,其中系统在渲染过程中跟踪依赖关系并相应地工作。重新渲染是Vue最显着的特征,也使其成为全世界开发人员广泛接受的框架。

类式的组件写法,还是声明式的写法

react是类式的写法,api很少,而Vue是声明式的写法,通过传入各种options,api和参数都很多。所以react结合typescript更容易一起写,Vue稍微复杂。

路由和状态管理解决方案

在像React和Vue这样的基于组件的框架中,当您开始扩展应用程序时,需要更加关注状态管理和数据流。这是因为有许多组件相互交互并共享数据。在这种情况下,React提供了一种称为Flux
/
Redux架构的创新解决方案,它代表单向数据流,是著名MVC架构的替代方案。现在,如果我们考虑Vue.js框架,就会有一个名为Vuex的更高级架构,它集成到Vue中并提供无与伦比的体验。

构建工具

React和Vue都有一个非常好的开发环境。只需很少或没有配置,就可以创建应用程序,能够使用最新的实践和模板。在React中,有一个Create
React App(CRA),在Vue中,它是vue-cli。这两种引导工具都倾向于提供舒适灵活的开发环境,并提供开始编码的出色起点。

Vue的优势包括: 模板和渲染函数的弹性选择, 简单的语法及项目创建, 更快的渲染速度和更小的体积;React的优势包括: 更适用于大型应用和更好的可测试性,同时适用于Web端和原生App, 更大的生态圈带来的更多支持和工具 。
  而实际上,React和Vue都是非常优秀的框架,它们之间的相似之处多过不同之处,并且它们大部分最棒的功能是相通的。如果想将降低学习成本或前端JavaScript框架集成到现有应用程序中,Vue是更好的选择,如果想构建大型应用项目或者使用JavaScript构建移动应用程序,React绝对是最好的选择。

以上参考:https://blog.csdn.net/weixin_44246717/article/details/113853786

2.建立一个新的react项目

npx create-react-app my-app

3.组件 Todolist

import { Component, Fragment } from "react"
//创建组件的方法
class Todolist extends Component {
//组件创建时首先会执行的方法
  constructor(props){
    super(props);
    //这个state是用来存当前组件的变量,后面获取这个值都需要通过state获取
    this.state = {
      inputValue: '',
      list:[]
    }
  }
  handleInputChange (e) {
    // console.log(e.target.value)
    this.setState({inputValue:e.target.value})
  }
  handleKeyUp (e) {
    // console.log(e.keyCode)
    if (e.keyCode === 13 && this.state.inputValue!=="") {
      const list = [...this.state.list,this.state.inputValue]
      this.setState({
        list
      })
      this.setState({inputValue:''})
    }
    
  }
  deleteClick (index) {
    console.log(index)
    let list = [...this.state.list]
    list.splice(index, 1);
    //改写变量要通过setState
    this.setState({
      list
    })
  }
  render(){
    return (
    //这是jsx语法,可以直接在render里加上dom标签,如果要使用变量,一定要加大括号,事件监听如果用到this,一定要bind传递this
      <Fragment>
        <input value={this.state.inputValue}
          onChange={this.handleInputChange.bind(this)}
          onKeyUp={this.handleKeyUp.bind(this)}  
        />
        <ul>
          {this.state.list.map((value, index)=>{
            return (<li key={index} onClick={this.deleteClick.bind(this,index)}>
                      {value}
                    </li>)
          })}
        </ul>
      </Fragment>
    )
  }
 
}

export default Todolist

4.index.js

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
// import App from './App';
import reportWebVitals from './reportWebVitals';
import Todolist from './Todolist';
//组件头字母必须大写,jsx拼写也要头字母大写
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <div>
      {/* <App /> */
      <Todolist/>
    </div>
    
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react入门学习---Todolist的实现(便签输入增删) 的相关文章

  • Jasmine-jQuery loadFixtures 未定义

    我对整个茉莉花的事情仍然很陌生 在过去的几个小时里我陷入了这个问题 我尝试使用 loadFixture 加载外部夹具文件 我使用 Jasmine 2 0 0 和 Jasmine jQuery 2 0 5 ReferenceError loa
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • Javascript - 在加载所有图像后执行

    看了别人的问题我想 window onload 会回答我的问题 我已经尝试过这个 但它会在页面加载时立即执行代码 而不是在图像加载之后 如果有什么区别的话 图像来自 CDN 并且不是相对的 有人知道解决办法吗 我没有使用 jQuery 想要
  • 打开 md-calendar 时滚动到当前日期

    目前正在构建一个使用 Angular Material 的应用程序 我们需要一个 md calendar 组件 我们想要自定义按钮样式和内容 因此不使用普通的 md datepicker 问题是 当 md calender 打开时 滚动位置
  • 如何导入和导出 javascript ES6 类

    我是 javascript 和 nodejs 的新手 我正在使用这个项目来发展我的技能并学习新技术 目前我的项目使用多个相互依赖的类 类文件位于不同的目录中 我当前正在尝试使用 export 和 require 语句来允许在其他文件中引用类
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 将文本大小调整为矩形 在 Canvas HTML5 中调整大小

    我是 Canvas 新手 我正在创建一个网站 以在调整矩形大小时增加文本 我尝试了很多 但没有任何效果 实际上 我希望如果我仅按其宽度调整矩形大小 向左拉伸 向右拉伸 则仅应增加文本宽度而不是字体大小 我已经完成了字体大小 但发现增加孤立文
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 了解 JavaScript - 资源

    使用 StackOverflow 的微型 Digit Blog 功能进行描述here https stackoverflow com about 我想发布以下我刚刚看到的 我觉得很有趣的谷歌技术谈话视频 我一直在理解 javascript
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • 在 Fabric.js 中按宽度/高度在另一个画布对象内居中和缩放画布对象

    Goal 将一个对象 水平和垂直 置于另一个对象 矩形或组 的中心canvas via Fabric js或者通过Javascript保持原始对象的长宽比相同 但也不超过父对象的宽度 高度比例 父对象 矩形或组 不会居中于canvas元素
  • 获取点击的的DOM路径

    HTML div class lol a class rightArrow href a div 伪代码 rightArrow click function rightArrowParents this dom dom is the pse
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • React 应用程序中未调用 Microsoft Graph Toolkit 组件的事件处理程序

    我正在尝试在我的 React 应用程序中使用 Microsoft Graph Toolkit 中的登录组件 它工作得很好 但我似乎无法让任何事件发生 例如 import React from react import MgtLogin Pr
  • JavaScript 数组扩展语法的时间复杂度是多少?

    我想知道在 JavaScript 中使用数组扩展的时间复杂度是多少 是线性 O n 还是常数 O 1 下面的语法示例 let lar Math max nums 传播称为 Symbol iterator 有关对象的属性 对于数组 这将迭代数
  • Node.js - 重载函数

    有没有一种方法可以重载node js中的函数 类似于 noSuchMethod https developer mozilla org en JavaScript Reference Global Objects Object noSuch
  • 将 RequireJS 与遗留代码结合使用

    我正在处理一个非常大的项目 该项目使用 包含带有脚本标记的 javascript 文件的旧版 JSP 页面 使用其他 javascript 模块而不使用 RequireJS 的骨干模型和视图 现在 我们希望开始将 RequireJS 与 j
  • Internet Explorer 9 是否会因数组和对象文字末尾的额外逗号而卡住?

    现代浏览器和 Node js 等环境允许您说 a 1 b 2 或 1 2 3 这在历史上一直是 Internet Explorer 的问题 Internet Explorer 9 中修复了此问题吗 对此有两种不同的答案 一种是对象初始值设定

随机推荐

  • Linux获取当前时间

    1 Linux下与时间有关的结构体 struct timeval int tv sec int tv usec 其中tv sec是由凌晨开始算起的秒数 tv usec则是微秒 10E 6 second struct timezone int
  • 在Markdown中用LaTeX/KaTeX输入公式-csdn

    在Markdown中用LaTeX输入公式 csdn Markdown语法简洁 LaTeX版面优美 相互配合 可以使用Markdown处理大多数的公式输入 LaTeX的教程中 刘海洋的 LaTeX入门 全面专业 其中第1章第2节的示例 杂谈勾
  • TCP之Delay Ack和Nagle算法

    TCP之Delay Ack和Nagle算法 1 Delay Ack TCP是可靠传输 可靠的核心是收到包后回复一个ack来告诉对方收到了
  • 推挽电路 MOS管、推挽输出和开漏输出

    专题5 硬件设计 之 48 推挽电路驱动MOS管 嵌入式工程师成长之路的博客 CSDN博客 推挽驱动 专题2 电子工程师 之 硬件 之 44 MOS管的功能特点 专题2 电子工程师 之 硬件 之 45 AON6244 MOS管数据手册分析
  • java 判断一个对象是否为空对象

    前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住分享一下给大家 点击跳转到网站 最近项目中遇到一个问题 在用户没填数据的时候 我们需要接收从前端传过来的对象为null 但是前端说他们一个一个判断特别麻烦 只能传个空对象过来
  • WEBRTC+windows10+vs2017编译全过程

    1 下载depot tools https storage googleapis com chrome infra depot tools zip 下载后将其解压到相应文件夹中 并将其路径添加到系统的环境变量中 2 自动更新工具 管理员权限
  • 04 ZooKeeperAPI实战

    文章目录 04 ZooKeeperAPI实战 1 IDEA环境搭建 2 zk连接创建与关闭 3 创建节点 4 删除节点 5 获取数据和验证连接转移 6 注册watcher监听和监听事件被触发 7 判断节点是否存在和修改节点 8 判断节点是否
  • 机器人到达终点有几条路径(动态规划)

    无障碍版本 A robot is located at the top left corner of a m x n grid marked Start in the diagram below The robot can only mov
  • Python中的“ @”(@)符号有什么作用?

    我正在看一些使用 符号的Python代码 但我不知道它的作用 我也不知道要搜索什么 因为搜索Python文档时会出现 或者当包含 符号时Google不会返回相关结果 1楼 此代码段 def decorator func return fun
  • FreeRTOS死机原因

    1 中断回调函数中没有使用中断级API xxFromISR 函数 xSemaphoreGiveFromISR uart busy HighterTask 正确 xSemaphoreGive uart busy 错误 2 比configMAX
  • Docker搭建Hadoop集群

    目录 1 拉取centos镜像 2 基础镜像配置 基于centos构建hadoopbase镜像 3 集群环境配置 1 创建3个容器 2 配置网络 3 配置主机和ip的映射关系 4 配置3个节点的免密登录 4 搭建hadoop集群 1 安装h
  • FISCO BCOS——SmartDev-Contract——MarriageEvidence结婚证书合约案例分析

    MarriageEvidence结婚证书合约案例分析 一 合约场景分析 二丶基础合约介绍 1 角色合约 1 功能说明 2 接口说明 3 使用说明 2 存证合约 1 功能说明 2 接口说明 3 使用说明 三丶业务合约介绍 1 结婚证书合约 1
  • 瞬时极性法对正负反馈的判断方法_如何判断放大电路中的反馈及类型?

    负反馈放大器可组合成四种类型 即 电流串联 电流并联 电压串联 电压并联四种负反馈类型 正负反馈的判断 正负反馈的判断使用瞬时极性法 瞬时极性是一种假设的状态 它假设在放大电路的输入端引入一瞬时增加的信号 这个信号通过放大电路和反馈回路回到
  • android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项

    1 Android手机目前常见的分辨率 1 1 手机常见分辨率 4 3 VGA 640 480 Video Graphics Array QVGA 320 240 Quarter VGA HVGA 480 320 Half size VGA
  • 来也科技面试--小白面试日记

    我们所度过的每个平凡的日常 也许就是连续发生的奇迹 1 自我介绍 说得有点少 下面应该再准备的多一点 2 然后问了我不是本专业的 有没有学过数据结构这些 之后就问了算法题这些 3 冒泡排序的时间复杂度为多少 O n n 然后写一下冒泡排序的
  • 在IntelliJ IDEA上将WSDL生成Java代码

    最近接触了一个android项目 但是需要自己用webService的方法获取数据 而且只给了一个wsdl的地址 今天介绍如何利用wsdl生成Java客户端并且进行测试 一 安装一个IntelliJ IDEA Windows平台 自行选择x
  • Day4:前端路由(进阶篇)

    目标 持续输出 每日分享关于web前端常见知识 面试题 性能优化 新技术等方面的内容 主要面向群体 前端开发工程师 初 中 高级 应届 转行 培训等同学 Day4 今日话题 今天分享的是前端路由的进阶篇 将从路由的实现原理 路由懒加载 路由
  • 局域网部署Docker--从无到有创建自己的Docker私有仓库

    转载自http www linuxidc com Linux 2014 08 105654 htm 国内用户在使用docker的时候 pull一个基本的镜像都拉下来 更不用说使用官方的index镜像了 查找了好多资料 终于找到了局域网中应用
  • vector与vector::iterator

    vector
  • react入门学习---Todolist的实现(便签输入增删)

    1 学习react和vue的区别 主要学习了react的数据渲染方式 这和vue差别很大 数据是否可变 React 整体是函数式的思想 在react中 是单向数据流 推崇结合immutable来实现数据不可变 Vue 的思想是响应式的 也就