首页 > 其他分享 >js && jsx

js && jsx

时间:2024-10-19 18:10:03浏览次数:5  
标签:count 状态 渲染 js React 待办 && 组件 jsx

初始化
useState 是React的一个钩子(Hook),用于在函数组件中添加状态。
currentTodoItem:当前输入框中的待办事项文本【字符串】。
todoList:待办事项列表,包含多个【数组】待办事项对象。

sortTodo
这个函数用于比较两个待办事项,并决定它们的顺序。如果两个待办事项的完成状态不同,已完成的待办事项会排在后面。如果完成状态相同,则按照它们的 id 排序。

handleAddTodo
这个函数在用户点击添加按钮时被调用。它会检查输入框是否为空,如果不为空,则创建一个新的待办事项并添加到列表中,然后更新状态。

handleDeleteTodo(id)
这个函数接收一个 id 作为参数,并从待办事项列表中删除具有该 id 的待办事项。然后对更新后的列表进行排序并更新状态。

handleToggleTodo(id)
这个函数用于切换待办事项的完成状态。它通过 map 方法遍历待办事项列表,找到具有指定 id 的待办事项,并切换其 isCompleted 属性。

组件是什么?

组件(Component)是一个可重用的界面元素,它封装了特定的功能和行为

  1. 定义
    组件 是一个独立的、可复用的代码块,它描述了界面的一部分。
    React中,组件可以是(Class Component)或函数(Functional Component)。
  2. 功能
  • 组件负责渲染UI的一部分,并且可以管理自己的状态和属性(props)。
  • 组件可以接收输入(通常是通过props),并根据这些输入渲染输出(UI元素)
  • 组件可以包含其他组件,从而构建出复杂的UI结构
  1. 分类
  2. 函数组件:使用JavaScript函数来创建的组件,它接受一个props对象作为参数返回一个React元素
  3. 类组件:使用ES6类来创建的组件,它具有更多的特性,如内部状态(state)和生命周期方法。
  4. 例子
    以下是一个简单的React函数组件的例子:

function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

在这个例子中,Welcome是一个组件,它接受一个名为props的参数,并返回一个包含问候语的h1元素。

  1. 特点
    可复用性:组件可以在不同的地方多次使用,只需传入不同的props。
    封装性:组件内部的状态和行为被封装起来,对外只暴露必要的接口。
    组合性:组件可以嵌套使用,即组件内部可以包含其他组件,形成组件树。
  2. 优势
    模块化:组件化使得代码更加模块化,易于管理和维护。
    可读性:组件化的代码结构清晰,易于其他开发者理解和接手。
    可测试性:独立的组件可以单独测试,提高了测试的效率和覆盖率。

jsx中状态表达式长什么样子?

在 JSX 中,你可以使用各种表达式来展示或操作状态。以下是一些常见的使用状态的表达式示例:

  • 显示状态值:
<p>The count is: {count}</p>
  • 条件渲染:
{isShown && <div>The content is shown.</div>}

isShown 是一个布尔值变量。它可能是 true 或 false。
后者 是一个 JSX 元素,你想要根据条件渲染它。
isShown === true ==>结果是后者得到渲染
反之,结果是 isShown === false,啥也不展示


或者

{isShown ? <div>The content is shown.</div> : <div>The content is hidden.</div>}

三元运算符(A?B :C)运算符根据 A 的值来决定渲染哪个 JSX 元素[B or C]。

  • 三元运算符:

Status: {isOnline ? 'Online' : 'Offline'}

  • 数组方式渲染列表
{items.map(item => (
  <li key={item.id}>{item.name}</li>
// 对于数组中的每个元素(我们称之为 item),创建一个 <li> 标签。
// 给每个 <li> 标签设置一个 key 属性,这个属性的值是 item 的 id。
// 在 <li> 标签内部显示 item 的 name
// const items = [
//   { id: 1, name: '苹果' },
//   { id: 2, name: '香蕉' },
//   { id: 3, name: '橘子' }
// ];
// 使用 {items.map(item => (<li key={item.id}>{item.name}</li>))} 后,你将得到以下 HTML:
// <ul>
//   <li key="1">苹果</li>
//   <li key="2">香蕉</li>
//   <li key="3">橘子</li>
// </ul>

))}
// items 是一个数组,假设它包含了多个对象,每个对象代表一个项(item)。
// 这个箭头函数为每个数组元素返回一个 JSX 元素。

在 React 中,当你有一个数组,并且你想在 UI 中渲染这个数组的每个元素时,你通常会使用 JavaScript 的 map 方法。map 方法遍历数组中的每个元素,并对每个元素执行一个函数,然后返回一个新的数组,该数组包含了每次函数调用的结果。

  • 字符串模板:
<h1>Hello, {name}!</h1>
  • 计算属性:
<p>Total: {count * price}</p>
// 创建一个 HTML 段落。
// 在这个段落中显示文本 "Total: a*b"。
// 然后计算 count 和 price 的乘积,并将结果显示在同一行上。

  • 样式绑定:
<div style={{ color: isActive ? 'red' : 'blue' }}>This text color changes.</div>

  • 类名绑定:
<div className={classNames('btn', { 'btn-primary': isActive, 'btn-secondary': !isActive })}>
  Click me
</div>

创建一个 div 元素,并给它添加一个固定的类名 'btn'。
根据组件的状态 isActive 动态地添加 'btn-primary''btn-secondary' 类名。如果 isActive 为 true,则添加 'btn-primary' 类名[前者];如果为 false,则添加 'btn-secondary' 类名。
在 div 中显示文本 “Click me”。

  • 事件处理:
<button onClick={() => setCount(count + 1)}>Increment</button>

  1. onClick:这是一个事件属性,用于指定当按钮被点击时要执行的 JavaScript 代码。
    () => setCount(count + 1):这是一个箭头函数,它不接受任何参数(()),并返回一个调用
  2. setCount 函数的表达式。setCount 函数通常是在使用 React 的 useState 钩子时定义的,用于更新状态变量 count 的值。
  3. 创建一个按钮,并在用户点击该按钮时执行一个函数。
    该函数使用 setCount 更新状态变量 count 的值,使其等于当前值加 1。
    按钮上显示的文本是 “Increment”,指示用户点击这个按钮将增加计数。
  • 解构状态:
const { username, age } = user;
<p>{username} is {age} years old.</p>

这行 JSX 代码会渲染一个段落 ,其中包含用户的名字和年龄。{username} 和 {age} 是 JSX 的表达式语法,它允许你在 JSX 中插入 JavaScript 表达式的值。

  • 属性展开:
const props = { name: 'John', age: 30 };
<User {...props} />

<User {...props} /> 这行代码创建了一个 User 组件的实例,并将 props 对象中的所有属性传递给它。这意味着 User 组件将接收 name 和 age 两个属性,它们分别被设置为 'John' 和 30。

这些表达式可以在 JSX 中直接使用,React 会计算表达式的结果并将其渲染到页面上。需要注意的是,在 JSX 中,所有的表达式都必须用花括号 {} 包围。

状态(state)是如何影响组件的?

  1. 状态定义组件的行为
    组件的状态定义了它的行为显示内容。例如,在一个待办事项列表组件中,状态可能包含待办事项的列表。当用户添加、删除或标记待办事项为完成时,这些操作会更新状态,从而改变组件的行为和显示。

  2. 状态的改变触发组件的更新
    当组件的状态通过setState(在类组件中)或setXxx(在函数组件中使用useState钩子)函数更新时,React会重新渲染该组件。这是React响应式更新的核心机制。

  3. 状态是组件私有的
    状态是组件的私有数据,它只能在定义它的组件内部访问和修改。这意味着组件的状态不会直接影响其他组件,除非通过特定的方式(如props)传递。

以下是状态影响组件的详细过程:

状态初始化

在组件创建时,状态被初始化。对于函数组件,使用useState钩子进行初始化:

const [count, setCount] = React.useState(0);

在这个例子中,count是组件的初始状态,数字初始化 (0)
数组初始化 ([])
字符串初始化 ("")
当组件需要更新状态时,可以使用setCount函数:

状态更新

当组件需要更新状态时,可以使用set--首字母大写 函数:

function handleClick() {
  setCount(count + 1);
}

每次调用setCount时,React都会调度一个更新,这会导致组件重新渲染。

组件重新渲染

当状态更新后,React会重新渲染组件。在这个过程中,React会使用新的状态值来生成组件的输出。这意味着任何依赖于状态的数据或UI都会根据新的状态进行更新。

响应式UI

因为组件在状态更新后重新渲染,所以任何在渲染过程中使用状态的表达式都会得到更新
例如:

function Counter() {
  const [count, setCount] = React.useState(0);

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={() => setCount(count + 1)}>Click me</button>
    </div>
  );
}

在这个Counter组件中,每当点击按钮时,count状态会增加,然后组件会重新渲染,显示新的点击次数

标签:count,状态,渲染,js,React,待办,&&,组件,jsx
From: https://www.cnblogs.com/GJ504b/p/18478084

相关文章

  • js查缺补漏——引用类型对象和数组
    一、什么是引用类型——Object引用类型是一种数据结构,而对象是引用类型的实例。有时候也叫对象定义,包含对象的属性和方法。Object是原生引用类型之一。创建对象实例的方法:1.使用new操作符varobj=newObject()obj.name="aaa"obj.age=122.使用对象字面量的......
  • 前端js html css 基础巩固4
    这是生成了不同的按钮进行显示 每一个按钮对应一个音频 点击按钮会播放对应的音频直接上代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0&qu......
  • “JsonConvert”同时存在于“Newtonsoft.Json.Net20, Version=3.5.0.0, Culture=neutr
    原因是两个dll冲突了。需要去掉一个。Newtonsoft.Json(也称为Json.NET)是一个流行的开源JSON框架,用于.NET,它以其高性能、易用性和广泛的功能而闻名。它支持丰富的数据操作和序列化属性设置,如自定义转换器、日期时间格式控制、命名策略等。Json.NET还提供了序列化特性,如JsonObjectA......
  • 基于Node.js+vue公司日常考勤系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于公司日常考勤系统的研究,现有研究主要集中在大型企业的整体人力资源管理系统中的考勤模块,专门针对中小型企业日常考勤系统独立开发与优化的研究较少......
  • 基于Node.js+vue化妆品配方及工艺管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于化妆品配方及工艺管理系统的研究,现有研究主要以化妆品的成分分析或单一功能模块(如配方设计)为主1,专门针对配方及工艺管理系统,整合用户、化妆品信息、......
  • 基于Node.js+vue个人记账服务系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于个人记账服务系统的研究,现有研究主要以企业财务管理系统为主,专门针对个人的记账服务系统研究较少。在国外,个人理财观念兴起较早,相关的个人财务管理......
  • 基于Node.js+vue翰明教育教学管理系统(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于教育教学管理系统的研究,现有研究主要以通用型的管理系统为主,专门针对翰明教育教学管理系统这种特定情境下的研究较少。在国内外,教育教学管理系统已......
  • Nuxt.js 应用中的 app:templatesGenerated 事件钩子详解
    title:Nuxt.js应用中的app:templatesGenerated事件钩子详解date:2024/10/19updated:2024/10/19author:cmdragonexcerpt:app:templatesGenerated是Nuxt.js的一个生命周期钩子,在模板编译到虚拟文件系统(VirtualFileSystem,VFS)之后被调用。这个钩子允许开发者在生......
  • jsp高校毕业生论文管理系统v3w2a
    jsp高校毕业生论文管理系统v3w2a本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能学生,院系管理员,论文信息,论文类型,论文成绩,下载记录,普通用户,院系名称,专业开题报告内容一、项目背景与意义在......
  • jsp高校毕业生离校系统7fq55
    jsp高校毕业生离校系统7fq55本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能用户,离校申请,离校人员,宿管,辅导员,财务员,缴费信息,消息通知,离校事务,钥匙归还开题报告内容一、项目背景与意义随......