公司网站建设模板Wordpress手机端模版

news/2025/9/27 19:09:51/文章来源:
公司网站建设模板,Wordpress手机端模版,安全者 wordpress,百度seo排名工具React之组件的介绍、创建与使用,事件对象,this指向问题,修改状态以及受控组件与非受控组件 一、组件基本介绍二、组件创建2.1 函数组件2.2 类组件 三、将组件提取到单独的js文件中四、有状态组件和无状态组件五、类组件的状态六、事件处理6.1 注册事件6.2 事件对象6.3 this指向… React之组件的介绍、创建与使用,事件对象,this指向问题,修改状态以及受控组件与非受控组件 一、组件基本介绍二、组件创建2.1 函数组件2.2 类组件 三、将组件提取到单独的js文件中四、有状态组件和无状态组件五、类组件的状态六、事件处理6.1 注册事件6.2 事件对象6.3 this指向问题6.4 this指向解决方案 七、setState 修改状态八、react核心理念(状态不可变)九、表单处理9.1 受控组件9.2 非受控组件-ref 一、组件基本介绍 组件是 React 开发现代前端开发中最重要的内容组件允许你将 UI 拆分为独立、可复用的部分每个部分都可以独立的思考组合多个组件组装乐高积木实现完整的页面功能特点独立、可复用、可组合组件包含三部分HTML/CSS/JS展示页面中的可复用部分 二、组件创建 2.1 函数组件 函数组件使用JS的函数或者箭头函数创建的组件 使用 JS 的函数(或箭头函数)创建的组件叫做函数组件约定1函数名称必须以大写字母开头React 据此区分组件和普通的 HTML标签约定2函数组件必须有返回值表示该组件的 UI 结构如果不需要渲染任何内容则返回 null 使用函数创建组件 // 使用普通函数创建组件 function Hello() {return div这是我的第一个函数组件!/div } function Button() {return button按钮/button }// 使用箭头函数创建组件 const Hello () div这是我的第一个函数组件!/div使用组件 组件就像 HTML 标签一样可以被渲染到页面中。组件表示的是一段结构内容对于函数组件来说渲染的内容是函数返回值对应的内容使用函数名称作为组件标签名称 // 使用 双标签 渲染组件 Hello/Hello ReactDOM.render(Hello/Hello, root)// 使用 单标签 渲染组件 Hello / ReactDOM.createRoot(document.querySelector(#root)).render(Hello/Hello)小结 在react中可以使用函数或者箭头函数创建组件组件的首字母必须大写 2.2 类组件 内容 使用 ES6 的 class 创建的组件叫做类class组件约定1类名称也必须以大写字母开头约定2类组件应该继承 React.Component 父类从而使用父类中提供的方法或属性约定3类组件必须提供 render 方法约定4render 方法必须有返回值表示该组件的 UI 结构 定义组件 // 导入 React import React from react class Hello extends React.Component {render() {return divHello Class Component!/div } } ReactDOM.render(Hello /, root)// 只导入 Component import { Component } from react class Hello extends Component {render() {return divHello Class Component!/div } }使用组件 ReactDOM.createRoot(document.querySelector(#root)).render(Hello/Hello)总结 使用class语法创建组件比函数创建稍微麻烦一些但是类组件的功能会比函数组件的功能更加强大hooks 之前 三、将组件提取到单独的js文件中 实现方式 创建 Hello.js创建组件函数 或 类在 Hello.js 中导出该组件在 index.js 中导入 Hello 组件渲染组件 核心代码 // index.js //直接导入 import Hello from ./Hello//按需导入 // import {Hello} from ./Hello// 渲染导入的Hello组件 ReactDOM.createRoot(document.querySelector(#root)).render(Hello/Hello)// Hello.js import { Component } from react class Hello extends Component {render() {return divHello Class Component!/div} } // 导出Hello组件(默认导出) export default Hello//按需导出 // export { // Hello // }四、有状态组件和无状态组件 内容 函数组件又叫做无状态组件 函数组件是不能自己提供数据【前提不考虑 hooks 的情况下】类组件又叫做有状态组件 类组件可以自己提供数据状态state是组件的私有数据当组件的状态发生了改变页面结构也就发生了改变数据驱动视图函数组件是没有状态的只负责页面的展示静态不会发生变化性能比较高类组件有自己的状态负责更新UI只要类组件的数据发生了改变UI 就会发生更新动态在项目中一般都是由函数组件和类组件共同配合来完成的 比如计数器案例点击按钮让数值1 0和1就是不同时刻的状态当状态从0变成1之后UI也要跟着发生变化。React想要实现这种功能就需要使用有状态组件来完成。 函数组件和类组件的区别有没有状态【前提不考虑 hooks 的情况下】 五、类组件的状态 内容 状态state即数据是组件内部的私有数据只能在组件内部使用状态 state 的值是对象表示一个组件中可以有多个数据通过 this.state.xxx 来获取状态 核心代码 创建 state class Hello extends Component {// 为组件提供状态state {count: 0,list: [],isLoading: true}render() {return (div计数器/div)} }读取状态通过 this.state 来获取状态 class Hello extends Component {// ...render() {// 通过 this.state 来访问类组件的状态return (div计数器{this.state.count}/div)} }六、事件处理 6.1 注册事件 内容 React注册事件与DOM的事件语法非常像 语法on事件名 事件处理程序 比如onClick{this.handleClick} 注意React事件采用驼峰命名法比如onMouseEnter, onClick 核心代码 class App extends React.Component {handleClick() {console.log(点击事件触发)}render() {return (divbutton onClick{this.handleClick}点我/button/div)} }6.2 事件对象 核心代码 可以通过事件处理程序的参数获取到事件对象注意React 中的事件对象是 React 内部处理后的事件对象一般称为SyntheticBaseEvent 合成事件对象。用法与 DOM 原生的事件对象用法基本一致 function handleClick(e) {e.preventDefault()console.log(事件对象, e) }a onClick{this.handleClick}点我不会跳转页面/a6.3 this指向问题 内容 事件处理程序中的this指向的是undefined render方法中的this指向的是当前react组件。只有事件处理程序中的this有问题 原因 事件处理程序的函数式函数调用模式在严格模式下this指向undefinedrender函数是被组件实例调用的因此render函数中的this指向当前组件 class App extends React.Component {state {msg: hello react}handleClick() {console.log(this.state.msg)}render() {return (divbutton onClick{this.handleClick}点我/button/div)} }总结 在react的事件处理函数中this指向undefined 6.4 this指向解决方案 内容 解决事件处理程序中this指向问题主要有三种方式 方式1箭头函数 class App extends React.Component {state {msg: hello react}handleClick() {console.log(this.state.msg)}render() {return (divbutton onClick{() this.handleClick()}点我/button/div)} }方式2bind class App extends React.Component {state {msg: hello react}handleClick() {console.log(this.state.msg)}render() {return (divbutton onClick{this.handleClick.bind(this)}点我/button/div)} }方式3箭头函数形式的实例方法 - 推荐使用 class App extends React.Component {state {msg: hello react}handleClick () {console.log(this.state.msg)}render() {return (divbutton onClick{this.handleClick}点我/button/div)} }总结 推荐使用方式3箭头函数形式的实例方法 解释为什么方式3可以解决 this 指向问题 // ES6 class Person1 {// 类的 构造函数constructor() {// 构造函数中的 this 就是实例对象console.log(this)this.name jackthis.fn () {console.log(this)}}// 上述写法简化语法// name jack// fn () {}// 这个形式的方法会被添加到原型中sayHi() {} }说明fn () {} 这种形式的语法是简化语法语法糖书写会更简单。实际上完整的写法是constructor() {this.fn () {} }即在构造函数中给 this 添加了一个方法 fn为什么可以解决 this 指向问题呢 因为 constructor 中创建的箭头函数内部的 this 会指向 constructor 中的 this 而 constructor 中的 this 就是实例对象也就是我们需要的 this七、setState 修改状态 内容 语法this.setState({ 要修改的部分数据 })setState() 作用1 修改 state 2 更新 UI思想数据驱动视图也就是只需要修改数据状态那么页面视图就会自动刷新 核心数据从现在开始我们关心的是如何修改数据而不再是关心如何修改DOM并且注意尽量避免直接手动 DOM通过 document.querySelector() 获取到到DOM对象然后再操作 操作 注意不要直接修改 state 中的值这是无效的 核心代码 class Hello extends Component {state {count: 0}handleClick () {this.setState({count: 10})} render() {return (divh1计数器{this.state.count}/h1button onClick{this.handleClick}1/button/div)} }// 在 count 当前值的基础上加 1 this.setState({count: this.state.count 10 })总结 能直接修改 state 的值吗不能如何修改 React 组件中的状态setState()setState 是哪来的从 Component 父类继承过来的 八、react核心理念(状态不可变) 内容 状态不可变指的是不要直接修改状态的值而是基于当前状态创建新的状态值 核心代码 state {count: 0,list: [1, 2, 3],person: {name: jack,age: 18} }// 【不推荐】直接修改当前值的操作 this.state.count this.state.count this.state.count 1 this.state.count 1// 只要是数组中直接修改当前数组的方法都不能用 this.state.list.push(123)this.state.person.name rose// 【推荐】不是直接修改当前值而是创建新值的操作 this.setState({count: this.state.count 1,list: [...this.state.list, 123],person: {...this.state.person,// 要修改的属性会覆盖原来的属性这样就可以达到修改对象中属性的目的了name: rose} })九、表单处理 9.1 受控组件 内容 HTML中表单元素是可输入的即表单元素维护着自己的可变状态value但是在react中可变状态通常是保存在state中的并且要求状态只能通过setState进行修改React中将state中的数据与表单元素的value值绑定到了一起由state的值来控制表单元素的值受控组件value值受到了react状态控制的表单元素 核心代码 class App extends React.Component {state {msg: hello react}handleChange (e) {this.setState({msg: e.target.value})}render() {return (divinput typetext value{this.state.msg} onChange{this.handleChange}//div)} }总结 使用受控组件的方式处理表单元素后状态的值就是表单元素的值。即想要操作表单元素的值只需要操作对应的状态即可* 9.2 非受控组件-ref 非受控组件借助于ref使用原生DOM的方式来获取表单元素的值 内容 受控组件是通过 React 组件的状态来控制表单元素的值非受控组件是通过手动操作 DOM 的方式来控制此时需要用到一个新的概念refref用来在 React 中获取 DOM 元素 核心代码 // 1 导入 createRef 函数 用来创建 ref 对象 import { createRef } from reactclass Hello extends Component {// 2 调用 createRef 函数来创建一个 ref 对象// ref 对象的名称txtRef可以是任意值// 命名要规范 txtDOM 元素的自己标识 ReftxtRef createRef()handleClick () {// 文本框对应的 DOM 元素// console.log(this.txtRef.current)// 4 获取文本框的值console.log(this.txtRef.current.value)}render() {return (div{/*3 将创建好的 ref 对象设置为 input 标签的 ref 属性值作用将 ref 和 input DOM 绑定到一起将来在通过 this.txtRef 拿到的就是当前 DOM 对象*/}input ref{this.txtRef} /button onClick{this.handleClick}获取文本框的值/button/div)} }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站栏目设计美团后台管理系统登录

还在为繁琐的文本处理而烦恼吗?PopClip for Mac来帮您解决!这款神器般的文本处理工具,能让您轻松应对各种文本处理任务。无论是写作、编程还是日常办公,PopClip for Mac都能助您一臂之力,让您的文本处理更高效、更便捷…

网站页面做多宽东莞网站建设报价

三、安装配置多实例MYSQL5.6-多独立配置文件方法1、准备工作检查操作系统版本、内核版本、selinux是否关闭、防火墙策略、IP地址、主机名配置、host表配置、yum配置上传cmake、mysql5.6软件包具体步骤参考源码安装mysql-单实例配置文档2、安装cmake软件2.1 安装编译软件环境[[e…

[题解]P11533 [NOISG 2023 Finals] Topical

思路 有一个很简单的 \(\Theta(n^2m)\) 的做法,每一轮枚举所有未进行的考核,判断以当前的能力能否通过这个考核,然后更新当前的能力。 考虑优化,如果每一次都能精准找到一个能够通过的考核,那么就能优化掉一个 \(…

详解 Kubernetes 命令:kubectl exec -it nginx -- bash 及实战场景 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

day20_修改 删除功能

day20_修改 删除功能 1版本号 1.1版本号机制作用 后端处理数据时 通常通过版本号机制 限制数据的随意覆盖 一般用在有多用户同时操作的业务数据表中 (很少变动的数据 一般不加)1.2需要修改的部分 1数据库增加字段修改现…

[题解]P10231 [COCI 2023/2024 #4] Putovanje

思路 考虑从每一个 \(d_i \neq -1\) 的点开始往外走 \(d_i\) 步,然后所有这些点走到的点的集合取交集就是答案,复杂度是 \(\Theta(n^2)\) 的。 注意到我们需要对一些集合取交,容易想到 bitset 优化,此时的复杂度瓶…

首都农村医学人才培养体系建设与农村医学人才培养的研究与实践 网站电子元器件做哪个网站好

目录 什么是数据库数据库的概念模型层次模型网状模型关系模型 为什么要使用关系型数据库完整性约束结构化查询语言SQL基本语句 什么是数据库 考虑这些问题:当用户使用软件计算时,如果想要保存计算结果或者想选择不同的题目,是否要保存、读取…

网站技术外包公司建设网站前的市场分析包括

微深节能格雷母线高精度位移测量系统是一种先进的工业自动化位置检测解决方案,它被广泛应用于煤码头自动化翻堆及取料集控系统中,以实现对斗轮堆取料机等大型机械设备的精准定位和自动化控制。 系统原理简述: 格雷母线系统的工作原理基于电磁…

网站租用服务器价格建设一个网站要多少钱

1. 抽象 在面向对象编程中,抽象是指将类的属性和方法捆绑在一起,形成一个整体。抽象类无法实例化,但可以作为其他类的基类或父类。在Python中,我们使用abc模块定义抽象类,其中至少包含一个抽象方法。抽象方法是无法直…

加强网站建设和维护福州营销网站建设模板

一、引出问题 在学习C语言单目操作符中~按位取反的过程中&#xff0c;对这样一段代码的结果产生了疑惑&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a 0;int b ~a;//按位取反printf("%d\n", b);return 0; }输出结果…

Linux环境之----POSIX信号量

Linux环境之----POSIX信号量pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

WPF Prism register interface and service, view and viewmodel, IRegionManager, RequestNavigate

Install-Package Prism.DryIOC; Install-Package Prism.Wpf;Install-Package Microsoft.Xaml.Behaviors.WPF; //App.xaml <prism:PrismApplication x:Class="WpfApp14.App"xmlns="http://schemas.m…

完整教程:Flink 容错从状态后端到 Exactly-Once

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

门户网站属于新媒体吗台州网站建设慕枫

莆田学院录取分数线2020是多少分&#xff0c;各专业录取分数线是多少&#xff0c;是每个填报莆田学院的考生最关注的问题&#xff0c;随着各省高考录取批次相继公布&#xff0c;考生也开始关心是否被录取&#xff0c;本站小编整理相关信息供参考&#xff0c;仅供参考。一、莆田…

兼职做网站赚钱吗网站首页设计图片简约

ChatGPT Admin Web 在团队和组织内共享使用人工智能的一站式解决方案。 ​编辑 ​编辑 ​编辑 CAW 是一个自托管网络应用程序&#xff0c;提供开箱即用的用户管理&#xff0c;包括后台界面以及可配置的支付计划和相关支付界面。 GitHub Sponsor / 爱发电 功能 Features …

【08】海康相机C#开发——在海康MVS的**C#实例中添加控件报错**“`不能在本地化模式下添加组件。在 Language 属性中选择”(默认)”以返回到默认格式,然后添加组件`” - 实践

【08】海康相机C#开发——在海康MVS的**C#实例中添加控件报错**“`不能在本地化模式下添加组件。在 Language 属性中选择”(默认)”以返回到默认格式,然后添加组件`” - 实践2025-09-27 18:47 tlnshuju 阅读(0) 评…

哪个建立网站好个人网上卖货的平台

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 导读&#xff1a; 我们在前面学习了单链表和顺序表&#xff0c;以及栈和队列。 今天我们来学习小堆。 关注博主或是订阅专栏&a…

# Windows CMD 基本指令参考手册

Windows CMD 基本指令参考手册常用命令提示符指令速查指南,包含直接复制功能Windows 命令提示符(CMD)是一个强大的工具,可以让您通过输入命令来执行各种系统操作。本参考手册整理了最常用的 CMD 指令,方便您快速查…

P13019 [GESP202506 八级] 树上旅行

解题思路 这个问题需要在有根树上模拟移动操作,但直接模拟会超时(因为移动次数可能很大)。核心思想是使用二进制提升(Binary Lifting)技术来优化移动过程。 关键观察:向上移动(移动到父节点):可以使用倍增表 …

完整教程:负载均衡式的在线OJ项目编写(二)

完整教程:负载均衡式的在线OJ项目编写(二)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…