React基础知识02

news2025/1/20 11:59:48

一、通过属性来传值(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.5
    console.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函数

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

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

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

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

3.hook-useEffect

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

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

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-module
    setpwd(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.coloradmin.cn/o/1165609.html

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

相关文章

浅谈安科瑞直流电表在荷兰光伏充电桩系统中的应用

摘要&#xff1a;本文介绍了安科瑞直流电表在荷兰光伏充电桩系统中的应用。主要用于充电桩的电流电压电能的计量。 Abstract: This article introduces the application of Acrel DC meters in PV charging pile system in Netherlands.The device is measuring current,volt…

腾讯云域名备案后,如何解析到华为云服务器Linux宝塔面板

一、购买域名并且进行备案和解析&#xff0c;正常情况下&#xff0c;购买完域名&#xff0c;如果找不到去哪备案&#xff0c;可以在腾讯云上搜索“备案”关键词就会出现了&#xff0c;所以这里不做详细介绍&#xff0c;直接进行步骤提示&#xff1a; 二、申请ssl证书&#xff0…

mysql简单备份和恢复

版本&#xff1a;mysql8.0 官方文档 &#xff1a;MySQL :: MySQL 8.0 Reference Manual :: 7 Backup and Recovery 1.物理备份恢复 物理备份是以数据文件形式备份。这种方式效率高点&#xff0c;适合大型数据库备份。物理备份可冷备可热备。 使用mysqlbackup 命令进行物理备…

命名数据网络(NDN)介绍

命名数据网络的由来 IP网络最开始其解决的问题是两个实体间点对点通信需求&#xff0c;实现资源共享。&#xff08;简单知道即可&#xff09; 随着互联网的发展&#xff0c;互联网用户对internet的需求现已经发生了巨大变化。目前面临着以下挑战 首先是随着以内容为中心&…

力扣刷题 day63:11-02

1.字符串中的第一个唯一字符 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 方法一&#xff1a;两次遍历哈希表 #方法一&#xff1a;两次遍历哈希表 def firstUniqChar(s):d{}for i in s:if …

Leetcode—707.设计链表【中等】双链表的设计明天再写

2023每日刷题&#xff08;十七&#xff09; Leetcode—707.设计链表 设计单链表实现代码 typedef struct Node {int val;struct Node* next; } MyLinkedList;MyLinkedList* myLinkedListCreate() {MyLinkedList* mList (MyLinkedList *)malloc(sizeof(MyLinkedList));mList-&…

知乎盈利来源分析与指标体系构建

知乎用户画像 知乎所属行业&#xff1a;内容社区平台 知乎上的内容涉及的领域&#xff1a; 婚恋情感&#xff08;300亿总阅读量&#xff0c;截止2022年12月&#xff09;、法律纠纷&#xff08;200亿&#xff09;、教育&#xff08;200亿&#xff09;、游戏&#xff08;150亿&…

React实现文本框输入文字内容动态给图片添加文字信息(多个)并生成新的图片

文章目录 思路一思路二1. 下载html2canvas依赖包2. 搭建页面,并且创建新增节点的区域3. 初始化新增第一个节点到页面中的某个指定模块4. 当文本框发生变动&#xff0c;修改节点信息5. 实现节点删除6. 利用html2canvas将模块生成canvas&#xff0c;然后转化成图片 完整代码 收到…

Leetcode刷题详解——汉诺塔问题

1. 题目链接&#xff1a;面试题 08.06. 汉诺塔问题 2. 题目描述&#xff1a; 在经典汉诺塔问题中&#xff0c;有 3 根柱子及 N 个不同大小的穿孔圆盘&#xff0c;盘子可以滑入任意一根柱子。一开始&#xff0c;所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放…

【Web】TCP 和 UCP 的含义和区别

文章目录 一、两者含义二、两者区别 一、两者含义 TCP/IP 协议组为传输层指明了两个协议&#xff1a;TCP 和 UDP&#xff0c;他们都是作为应用程序和网络操作的中介物 TCP &#xff08;传输控制协议&#xff09;&#xff1a;通过三次握手建立可靠的连接&#xff0c;发送端将数据…

Excel自学三部曲_Part3:Excel工作场景实战(二)

文章目录 二、基础概念、表格结构与常用函数1. 业务背景、字段含义2. 筛选、排序、冻结窗格3. 状态栏数据提示、调整数据显示格式4. 公式、引用、溢出5. 连接和提取函数、时间函数、IF和IFS函数、SUMIF和SUMIFS函数&#xff08;1&#xff09;每个业务组的成交额有多少&#xff…

解决使用IDEA启动SpringBoot项目报错 java: 警告: 源发行版 17 需要目标发行版 17 或者 java: 无效的目标发行版: 17

问题描述 今天新建了个SpringBoot项目&#xff0c;在启动的时候报错如下&#xff1a; java: 警告: 源发行版 17 需要目标发行版 17 分析问题 其实错误已经很明显了&#xff0c;由于我本地只有JDK8的环境&#xff0c;但是项目以及编译器的JDK是17&#xff0c;这时候把JDK版本修…

提示3D标题编辑器仍在运行如何解决 3D标题编辑器怎么使用

品牌型号&#xff1a;联想GeekPro 2020 系统&#xff1a;Windows 10 64位专业版 软件版本&#xff1a;会声会影2023旗舰版 3D标题因其独特的表现形式和多变的画面效果&#xff0c;被广泛应用于节目片头、宣传片、开幕式等诸多场景之中。掌握3D标题的使用技巧&#xff0c;能够…

SecureCRT 手动全部Tab窗口重连

在工作了一天后&#xff0c;到第二天上班的时候&#xff0c;前一天连接的服务会断开&#xff0c;因为公司内部网络自动断开了&#xff0c;所以一个个重新连接和登录 &#xff0c;用脚本轻松搞定。 # $language "VBScript" # $interface "1.0"Dim g_objTa…

数组基础知识三

二分查找法&#xff1a;也叫折半查找算法。二分查找针对的是一个有序的数据集合&#xff0c;每次都通过跟区间的中间元素对比&#xff0c;将待查找的区间缩小为之前的一半&#xff0c;直到找到要查找的元素&#xff0c;或者区间被缩小为 0。 #include <stdio.h>int main…

干了3年“点点点”,我废了...

简单概括一下 先说一下自己的情况&#xff0c;普通本科&#xff0c;18年通过校招进入深圳某软件公司&#xff0c;干了3年多的功能测试&#xff0c;21年的那会&#xff0c;因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不…

day53【子序列】1143.最长公共子序列 1035.不相交的线 53.最大子序和

文章目录 1143. 最长公共子序列1035.不相交的线53. 最大子序和 1143. 最长公共子序列 题目链接&#xff1a;力扣链接 讲解链接&#xff1a;代码随想录讲解 题意&#xff1a;给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 …

C++并发编程实战——05.内存模型与原子操作

文章目录 内存模型与原子操作内存模型原子操作和原子类型标准原子类型std::atomic_flagstd::atomic\<bool>std::atomic<T\*>std::atomic<user_define_type> 类模板非成员函数 同步操作和强制排序同步发生与先行发生内存序**顺序一致性**(memory_order_seq_cs…

Java选择与循环

1.选择 前言&#xff1a;什么是选择呢&#xff1f;在我们的人生中处处面临着选择&#xff0c;比如说在学校你可以选择玩&#xff0c;摆烂&#xff0c;当然也可以选择努力写代码&#xff0c;刷题。什么样的选择就会面临什么样的结果。 其实程序和人生一样&#xff1a;顺序中夹杂…

intellij idea拉取最新的依赖包

intellij idea setting 拉取最新的依赖包 File --> Settings --> Build, Execution, Deployment --> Build Tools --> Maven --> 勾选 Always update snapshots. 一般情况下&#xff0c;设置完就可以拉取到最新的依赖包了。 如下&#xff1a; 安装最新的依赖…