React基础知识02

一、通过属性来传值(props)

react中可以使用属性(props)可以传递给子组件,子组件可以使用这些属性值来控制其行为和呈现输出。

例子:

// 1.1 父组件
import React, { useState } from 'react'
// 1.2引入子组件
import Son from './component/01-son.jsx'
function App() {//1.3 咋父组件中定义一个对象let value = { name: "marray", age: "23", sex: "girl" }return (<div>{/* 1.4给子组件添加一个属性fa其属性值为value对象 */}<Son fa={value}></Son></div>)
}export default App//子组件部分
import React, { useState } from 'react'
function Son(res) {res = res.fa
1.5console.log(res);//打印的是从父组件传递过来的数据value这个对象// 传过来了可以在子组件中正常使用return (<div><h4>子组件部分</h4><div>{res.name}</div><div>{res.age}</div><div>{res.sex}</div></div>)
}export default Son

二、插槽

组件的属性里面传的一般是数据,也可以传组件,而在z鞍标签里传递的一般是模板(组件套组件、div、box3、son。。。。)

// 父组件
import React from 'react'
// 引入子组件
import Son from './component/01-son.jsx'
function App() {return (<div>{/* 在父组件中里用子组件,子组件内部又有标签,这些标签就叫做该组件的的孩子children*/}<Son >
//相当于vue中的插槽(slot用法)<h1>Son组件里的div标签01</h1><div>Son组件里的div标签02</div></Son></div>)
}
export default App//子组件部分
import React, { useState } from 'react'
function Son(res) {// 这时打印的res里面多了一个children属性,而这个属性的值是一个数组,数组里面的元素是父组件中使用son组件里// 中的h1标签和div标签,而这两个标签里面又有着自己的props属性,它的props属性值则是标签中的文字console.log(res);return (<div><h4>子组件部分</h4>{/* 通过点语法即可取到son组件的children */}{/* 这个就是相当于冲父组件传过来的模板 */}<div>{res.children}</div></div>)
}
export default Son

若在父组件用子组件是本身有一个children属性且有值,同时该组件里面还嵌套着div或其他标签,最后浏览器会显示哪个的信息呢

答:若该组件里面没有孩子,则页面显示该组件的属性,若有孩子,则显示的是组件里面的标签

// 父组件
import React from 'react'
// 引入子组件
import Son from './component/01-son.jsx'
function App() {return (<div>{/* 当组件Son里面没有标签时,显示的是son的属性值 */}<Son children="你好呀!" > </Son>{/* 若son标签既有children属性和children孩子,则children孩子会将children属性给覆盖,最终显示孩子模板 */}<Son children="son标签里面的children属性"><p>son组件里面的孩子</p></Son></div>)
}
export default App//子组件部分
import React, { useState } from 'react'
function Son(res) {console.log(res);return (<div><h4>子组件部分</h4>{/* 显示结果 */}<h2>{res.children}</h2></div>)
}
export default Son

三、hook(钩子)

Hook是React16.8版本中新引入的一项特性,允许我们在函数组件中使用状态(state)以及其他 React 的特性,而以往只有在 class类 组件才能使用。函数组件一般只用于简单的展示型组件,而 class 类组件则更适合处理业务逻辑和状态管理等方面的工作。

1.类组件的状态:this.state和setstate()

import React, { Component } from 'react'
class Lei extends Component {constructor() {super()// 这里的state相当于vue中data对象,是相应式的数据this.state = { name: "jack" }this.change = () => {// t通过setstate函数来修改state的数据:若对象里面存在该属性,则进行修改,若没有,则进行添加属性this.setState({ age: "24", sex: "boy", name: "黎明" })}console.log(this.state);}render() {return <div>{/* 访问name属性 */}<div>访问到的类里面的name属性:::{this.state.name}</div>{/* 改变其属性值。例:给该标签绑定一个点击事件,点击值改变 */}<div onClick={this.change}>点击修改name属性的值:::{this.state.name}</div></div>}
}
export default Lei

2.hook-usestate

响应式数据的条件:数据发生改变、页面要刷新(usestate返回的set函数)

函数组件实现响应式数据要借助usestate函数

usestate是react库中的一个函数,用于在函数组件中创建和管理状态,接收一个初始状态值作为参数,并返回一个包含当前状态值和更新状态值的数组

     const [变量,修改变量的函数]=usestate(” 保存的数据“)

        该变量的类型取决于usestate的保存的数据是什么类型的

变量可以用在页面中,该值是usestate中保存的数据

                                 当执行set函数时,会重新执行该组件(mycomponent),新旧两个节点进行比较,若哪个变了,直接将其节点进行替换。

3.hook-useEffect(依赖)

相当于vue中的生命周期函数,但它不是声明周期函数,思想不同,useEffect代表了前面的几个声明周期函数。

1.只运行一次(组件一加载就会执行)

2.当页面重新加载就会执行

3.监听多个变量的变化,若依赖项发生改变,则会执行该函数,不变化就不会执行(依赖),类似于属性监听器

4.执行副作用操作(业务操作),进行一些清理工作(如:执行计时器,清除计时器)

四、受控组件和非受控组件

1.非受控组件

含义:变量驱动UT但是输入时变量不变===>《输不动的控件:用户在浏览器的输入框中输不进去数据)称为非受控组件(inout纯标签也是非受控组件,但代码操作不了)

        给value绑定了一个死的变量,改变不了

用户在页面中输入的是value的值,但value没变,所以页面不会刷新,就会存在用户输入信息输不进去的情况,这叫做非受控组件


import React, { useState } from 'react'
function App() {let pwd = "1577260"function gaibian() {// 因为给input标签的value绑定了一个固定的值1577260// 而用户输入的也是value的值,但是你已经给value绑定了一个死的值,所以用户在页面上输入操作不起用// 改变不了,输入不进去信息console.log(pwd);}return (<div><input onInput={gaibian} type="text" value={pwd} /><div>输入框的值变化:::{pwd}</div></div>)
}
export default App

2.受控组件(相当于vue中的v-module:双向数据绑定)

含义:变量驱动ur但是输入时变量会变(监听交互获取交互结果=>改变状态)===>(输的动的控化


import React, { useState } from 'react'
function App() {const [pwd, setpwd] = useState(1231)let inputting = (aim) => {// 通过setpwd函数来实现数据的双向改变,当输入框的值改变后,页面中所有使用了该变量的地方都会刷新,相当于vue中的v-modulesetpwd(aim.target.value)}let [user, setuser] = useState("")return (<div>{/* 双向数据绑定 ,通过usestate来实现:用户在页面输入框输入数据时,页面中使用了该变量的地方都会刷新*/}<input onInput={inputting} type="text" value={pwd} /><div>输入框的值变化:::{pwd}</div><input value={user} onInput={e => setuser(e.target.value)} type="text" /><br /><hr /><b>:在标签中使用set函数实现数据刷新======{user}</b></div>)
}
export default App

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

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

相关文章

Rust编程基础之6大数据类型

1.Rust数据类型 在 Rust 中, 每一个值都属于某一个 数据类型&#xff08;data type&#xff09;, 这告诉 Rust 它被指定为何种数据&#xff0c;以便明确数据处理方式。我们将看到两类数据类型子集&#xff1a;标量&#xff08;scalar&#xff09;和复合&#xff08;compound&a…

多态 多继承的虚表深度剖析 (3)

&#x1f4af; 博客内容&#xff1a;多态 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准C后端工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这里是CSD…

NLP之Bert多分类实现案例(数据获取与处理)

文章目录 1. 代码解读1.1 代码展示1.2 流程介绍1.3 debug的方式逐行介绍 3. 知识点 1. 代码解读 1.1 代码展示 import json import numpy as np from tqdm import tqdmbert_model "bert-base-chinese"from transformers import AutoTokenizertokenizer AutoToken…

Open3D(C++) 最小二乘拟合平面(间接平差法)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、原理概述 通过传统最小二乘法对点云数据进行平面拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 Z Z

Monarch Mixer:一种性能比Transformer更强的网络架构

六年前&#xff0c;谷歌团队在arXiv上发表了革命性的论文《Attention is all you need》。作为一种优势的机器学习网络架构&#xff0c;Transformer技术迅速席卷全球。Transformer一直是现代基础模型背后的主力架构&#xff0c;并且在不同的应用程序中取得了令人印象深刻的成功…

tbh着色

在tbh中&#xff0c;着色之前&#xff0c;首先可以可以创建多个色板&#xff0c;如果不同角色颜色不一样&#xff0c;就可以创建多个色板&#xff0c;每一个色板代表的角色不同。 1、创建色板 有两种方式&#xff1a; 方法一&#xff1a;在颜色菜单中&#xff0c;点击左上角 …

SQL面试

#(1)请写出要查询员工J开头的名字其工号(EMPNO)及部门名称(DEPTNA)的 SQL语句SELECT e.emp,e.name,d.deptna FROM emp e left join dept d on d.deptno e.deptno where e.name like J%#(2)请写出要查询 Kevin 所在部门的部门代号(DEPTNO)及部门名称(DEPTNA)的 SQL 语句SELECT e…

D-Link管理系统默认账号密码

默认口令为 admin:admin 登陆成功 文笔生疏&#xff0c;措辞浅薄&#xff0c;望各位大佬不吝赐教&#xff0c;万分感谢。 免责声明&#xff1a;由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c; 文章…

【RabbitMQ】RabbitMQ 集群的搭建 —— 基于 Docker 搭建 RabbitMQ 的普通集群,镜像集群以及仲裁队列

文章目录 一、集群分类1.1 普通模式1.2 镜像模式1.3 仲裁队列 二、普通集群2.1 目标集群2.2 获取 Erlang Cookie2.3 集群配置2.4 启动集群2.5 测试集群 三、镜像模式3.1 镜像模式的特征3.2 镜像模式的配置3.2.1 exactly 模式3.2.2 all 模式3.2.3 nodes 模式 3.3 测试镜像模式 四…

使用lua-resty-request库编写爬虫IP实现数据抓取

目录 一、lua-resty-request库介绍 二、使用lua-resty-request库进行IP数据抓取 1、获取IP地址 2、设置请求 3、处理数据 三、代码实现 四、注意事项 五、总结 本文将深入探讨如何使用lua-resty-request库在爬虫程序中实现IP数据抓取。我们将首先介绍lua-resty-request…

windows自动登陆

新建文本粘贴下面代码&#xff0c;另存为注册表文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing] "Policy"hex:00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"DefaultUserN…

UI设计感蓝色商务数据后台网站模板源码

蓝色商务数据后台网站模板是一款适合网站模板下载。提示&#xff1a;本模板调用到谷歌字体库&#xff0c;可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/20852点html

K8S部署时IP问题

本次环境搭建需要安装三台Centos服务器&#xff08;一主二从&#xff09;&#xff1b;搭配的前提时做好ip的设置 主机IP规划 IP地址的设定需要根据自己主机来设置&#xff0c;在虚拟机的虚拟网络编辑器中看他给你的ip&#xff1b;不要查什么ipconfig了。 在虚拟网络编辑器中…

基于SSM的社区智慧养老监护管理平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

回顾十大数据恢复软件,帮助用于恢复丢失的文件!

您是否因丢失计算机上的重要文件而感到恐慌&#xff1f;你不是一个人&#xff01;数据丢失是许多人面临的严重问题&#xff0c;但幸运的是&#xff0c;有许多解决方案可以恢复数据。 在本文中&#xff0c;我将回顾十大数据恢复软件&#xff0c;以帮助您恢复丢失的文件&#xf…

ChatGPT 的 Text Completion

该章节我们来学习一下 “Text Completion” &#xff0c;也就是 “文本完成” 。“Text Completion” 并不是一种模型&#xff0c;而是指模型能够根据上下文自动完成缺失的文本部分&#xff0c;生成完整的文本。 ⭐ Text Completion 的介绍 Text Completion 也称为文本自动补全…

QT进度条 QProgressDialog基础、高级和样式表使用详解

一、基础使用 QProgressDialog是Qt中的一个类&#xff0c;用于显示一个进度条和一个取消按钮&#xff0c;让用户可以在长时间的操作中看到进度&#xff0c;并且可以随时取消。QProgressDialog的基本用法是创建一个对象&#xff0c;设置最小值和最大值&#xff0c;然后在循环中…

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据&#xff0c;而不仅仅是栈上的数据&#xff0c;可以使用一个叫做 clone 的通用函数。 看下面的代码…

告知粉丝 重要

告知! 亲爱的粉丝朋友们&#xff0c;由于CSDN(博客)平台的限制&#xff0c;被迫转入 公众号!希望粉丝朋友们谅解!我们也是被逼无奈~~ 但我们还是会在CSDN(博客)发文章&#xff0c;但很少。 如果想要接触更好的文章请关注我们公众号&#xff0c;谢谢! 微信公众号:

使用pytorch处理自己的数据集

目录 1 返回本地文件中的数据集 2 根据当前已有的数据集创建每一个样本数据对应的标签 3 tensorboard的使用 4 transforms处理数据 tranfroms.Totensor的使用 transforms.Normalize的使用 transforms.Resize的使用 transforms.Compose使用 5 dataset_transforms使用 1 返回本地…