前端框架react----条件渲染、循环处理、受控组件

2023-11-12

一、条件渲染

很多时候,用户可能会有多种操作需求,这个时候就需要我们对不同的操作选择不同的执行逻辑。

在react中,你可以创建不同的组件来封装各种你需要的行为,

react中的条件渲染和JavaScript中的一样,使用JavaScript运算法is或者条件运算符去创建元素来表现当前的状态,然后让React根据它们来更新UI,

比如我们创建一个十分简单的登录注册切换,首先,创建两个数组来展示登录或者注册:

function Login(props) {
    return (
        <button onClick={props.onClick}>去登陆</button>
    )
}

function Registered(props) {
    return (
        <button onClick={props.onClick}>去注册</button>
    )
}

接着,创建一个有状态的组件 LoginControl,在 state 中维护一个中间变量控制渲染哪一个组件,创建两个方法去改变这个中间变量的值:

this.state = {isLogin: false}

handelLogin() {
    this.setState({isLogin: true})
}

handelReginstered() {
    this.setState({isLogin: false})
}

 最终,在 render 函数中,我们通过 if 判断中间变量 isLogin 的值去决定渲染哪个组件

const isLogin = this.state.isLogin
let button 

if(isLogin) {
    button = <Login onClick={this.handelReginstered}></Login>
} else {
    button = <Registered onClick={this.handelLogin}></Registered>
}

这样通过将中间变量的值传递给组件的方式就实现了按照不同条件渲染不同组件的需求,当然,我们也可以使用更为简单的一种方式,比如三目运算符。通过中间变量的值,来选择需要显示的placeholder。

<input placeholder={isLogin ? '注册用户名': '登陆用户名'}></input>

二、循环处理

在实际的开发中,我们不可避免地会碰到列表这类数据的渲染。该怎么去处理这类数据,我相信你们脑海中浮现的第一种方式肯定就是循环

React 中处理数组转化为元素列表的方式基本就是这样

我们做一个 li 元素的遍历效果:

 使用 map 方法遍历数组,生成 li 元素,插入到 ul 元素中,最后在页面渲染.可以看到元素已经成功渲染到了页面

完全按照上面的方式创建 ul li 元素,毫无悬念我们会收获一个警告,大概长这样

 很明显,我们缺少一个 key 元素,key 帮助 React 识别哪些元素改变了,比如被添加或删除。因此你应当给数组中的每一个元素赋予一个确定的标识。

简单修改一下,应该是这样:

 key 元素的存在提高了组件变化、比对的效率,合理使用 key 需要注意以下几点:

  • 一个元素的 key 最好是这个元素在列表中拥有的一个独一无二的字符串,比如 id

  • 元素的 key 只有放在就近的数组上下文中才有意义(简单来说,哪里循环在哪里定义 key )

  • key 只是在兄弟节点之间必须唯一,它们不需要是全局唯一的。当我们生成两个不同的数组时,我们可以使用相同的 key

三、受控组件

React 中,可变的状态一般都保存在 state 中,如果我们想要去改变这个状态,就要通过 setState 的方式进行更新。但是,用户可输入的表单元素会维持自身状态,根据用户输入进行更新,这样 就引出了 受控组件 的概念

受控组件的特点:

  • 表单元素

  • React 渲染出来

  • React 控制值的改变,也就是说想要改变元素的值,只能通过 React 提供的方法来修改

<!-- 只读: 只能读取的input框 只展示 -->
<input value={this.state.data} readOnly></input>

<!--change事件-->
<input value={this.state.data} onChange={this.inputChange}></input>

<!-- defaultValue 非受控组件 -->
<input defaultValue={this.state.data}></input>

React提供了三种方式来处理表单元素

  • 可以添加 readOnly 设置为只读

  • 添加 change 事件,通过 setState 处理表单状态

  • 设置 valuedefaultValue 只执行第一次渲染

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

前端框架react----条件渲染、循环处理、受控组件 的相关文章

  • Direct3D纹理映射

    借助纹理映射技术 我们可将图像数据映射到三角形单元中 这种功能可以显著地增加所绘制场景的细节和真实感 例如创建一个立方体然后为其每个面映射一个板条纹理 从而将该立方体变为一个板条箱 在Direct3D中纹理用接口IDirect3DTextu

随机推荐

  • python判断工作日,节假日

    python判断工作日 节假日 模块 chinesecalendar 爬虫式的方法 模块 pandas 实例 模块 chinesecalendar 针对中国的节假日 强烈推荐 https pypi org project chineseca
  • 王道考研计算机网络第二章--物理层

    目录 2 1通信基础 2 1 1物理层基本概念 1物理层基本概念 2 1 2数据通信基础知识 1典型的数据通信模型 2数据通信相关术语 3三种通信方式 4两种数据传输方式 2 1 3码元 波特 速率 带宽 1码元 2速率 波特 带宽 2 1
  • 被入侵了怎么办?暴力破解被篡改了数据,该怎么处理?主机安全不容忽视

    主机安全关系着整个服务器数据的一个安全性 那么主机安全具体指什么呢 指保证主机在数据存储和处理的保密性 完整性 可用性 它包括硬件 固件 系统软件的自身安全 以及一系列附加的安全技术和安全管理措施 从而建立一个完整的主机安全保护环境 我们进
  • Kubernetes: K8S 容器集群管理系统

    虚拟机 gt 容器技术 传统部署 直接将应用程序部署在物理机上 虚拟机 vmware openstack 可以在操作系统中模拟出多台子电脑 Linux 子电脑之间是相互隔离的 独立 但是虚拟机存在启动慢 占用空间大 不易迁移的缺点 容器化技
  • openCV与freetype解决图片叠OSD的问题

    一 移植OPENCV3 4 1库 opencv 3 4 1 tar gz 功能 实现对图片的处理 移植文档见 正点原子 I MX6U 移植 OpenCV V1 3 注意版本 注意 安装交叉编译工具 注意 这里不能使用 NXP yocto 所
  • Oracle 12 创建数据库

    安装完oracle数据库软件后 就可以创建oracle数据库了 具体步骤如下 1 打开命令行 输入命令 dbca 通过它 我们可以对数据库进行管理 2 之后便会显示如下图所示的界面 点击下一步 3 进入配置数据库的界面 需要注意的是 a 全
  • ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统

    资产灯塔 不仅仅是域名收集 https github com TophantTechnology ARL 简介 旨在快速侦察与目标关联的互联网资产 构建基础资产信息库 协助甲方安全团队或者渗透测试人员有效侦察和检索资产 发现存在的薄弱点和攻
  • Notepad++查看hex文件

    一 打开插件 插件管理 二 找一下有没有一个hex开头的插件 有的话就安装它 然后重启软件 三 装完之后 插件里面就会出现下面这个东西 下面那张图百度上找的 我的里面找不到这个插件 四 如果找不到的话上github下一个 https git
  • 【Python网络爬虫与信息提取】Request+BeautifulSoup

    1 Request库 import requests r requests get https www baidu com print r status code print type r print r headers print r e
  • 使用R语言进行单因素方差分析(ANOVA)是一种常用的统计方法,它用于比较多个样本的均值是否存在显著差异

    使用R语言进行单因素方差分析 ANOVA 是一种常用的统计方法 它用于比较多个样本的均值是否存在显著差异 在R语言中 可以使用aov 函数来执行单因素方差分析 本文将详细介绍如何使用aov 函数进行单因素方差分析 并提供相应的源代码示例 假
  • Linux操作系统之mysql数据库简介

    文章目录 数据库的介绍 有关数据库的操作 有关数据表的操作 C语言访问mysql 事务 视图 索引 数据库的介绍 mysql数据库模型 关系型数据库与非关系型数据库 关系型数据库 指采用了关系模型来组织数据的数据库 关系模型就是指二维表格模
  • 爬虫实验笔记

    这里的爬虫实验害暂时没有遇到验证码等问题 步骤可以简单概括为 1 找到爬虫必要的信息 2 内容提取 3 将提取到的内容保存至xlsx文件 1 找到爬虫必要的信息 以zh为例 首先找一个自己感兴趣的贴 进入开发者模式 刷新 网络抓包 这个时候
  • HTTP请求头部Content-Type字段

    研究HTTP请求头部的 Content Type 字段 基于 Chrome 插件 DHC 1 GET 请求 GET 请求不存在请求实体部分 键值对参数放置在 URL 尾部 因此请求头不需要设置 Content Type 字段 非 ASCII
  • vscode 如何修改字体大小

    方法一 左上角的菜单栏 gt 查看 gt 放大 方法二 左上角的菜单栏 gt 首选项 gt 设置 gt 找到编辑器 gt 找到editor fontSize参数 gt 复制到右侧的编辑器中编辑editor fontSize 18 你想要的大
  • 微信小程序性能优化总结

    对微信小程序进行性能优化 主要可以从两大方面进行分析 性能扫描工具和代码优化 一 使用性能扫描工具 微信小程序提供了一个 体验评分 的工具插件 可以使用它获得微信小程序的一些性能数据和明显的缺陷 进而根据报告进行相应的优化 同时 为了方便开
  • Springboot实现发送邮箱

    Springboot实现发送邮箱 直接上代码了 简单粗暴 太简单 不要兴奋 一 pom文件
  • 基于Umi搭建的个人Dva脚手架(一) - 框架说明

    1 基本概念阐述 阅读本文前 你需要对react dva umi以及ant design的有一定的认识 具体的相关知识都可以参考官方文档 Umi 中文可发音为乌米 是一个可插拔的企业级 react 应用框架 是蚂蚁金服的底层前端框架 具体的
  • 语义化版本(SemVer)的范围

    转自 http www u396 com semver range html 在使用 Node js 和 Bower 的时候 其中的 package json 和 bower json 都会有 dependencies devDepende
  • 如何将jar加入自己的maven本地仓库

    本文介绍如何将本地的jar加入到自己的maven本地仓库中 直接在pom文件引用依赖即可 无需手动添加jar文件 一 检查mvn命令 有同学没有配置过maven环境变量 使用mvn命令时 会提示 mvn 不是内部或外部命令 也不是可运行的程
  • 前端框架react----条件渲染、循环处理、受控组件

    一 条件渲染 很多时候 用户可能会有多种操作需求 这个时候就需要我们对不同的操作选择不同的执行逻辑 在react中 你可以创建不同的组件来封装各种你需要的行为 react中的条件渲染和JavaScript中的一样 使用JavaScript运