当前位置: 首页 > news >正文

React高级特性

函数组件

import React from 'react';
// class组件
class ListClass extends React.Component {constructor(props) {super(props);}render() {const { list } = this.props;return (<ul>{list.map(item => <li key={item.id}>{item.name}</li>)}</ul>)}
}// 函数组件
const ListFunc = (props) => {const { list } = props;return (<ul>{list.map(item => <li key={item.id}>{item.name}</li>)}</ul>)
}export {ListClass,ListFunc
}

函数组件

  • 纯函数,输入props,输出JSX
  • 没有实例,没有生命周期,没有state
  • 不能扩展其他方法

非受控组件

  • ref
  • defaultValue defaultChecked
  • 手动操作DOM元素
import React from 'react';
// class组件
class Test extends React.Component {constructor(props) {super(props);this.fileInputRef = React.createRef();this.nameInputRef = React.createRef();}render() {return <div><input type="file" ref={this.fileInputRef}/><button onClick={this.alertFile}>alert file</button></div>}alertFile = () => {const elem = this.fileInputRef.current;alert(elem.value); // 不是this.fileInputRef.value}alertName = () => {const elem = this.nameInputRef.current;alert(elem.value); // 不是this.nameInputRef.value}
}export default Test;

非受控组件-使用场景

  • 必须手动操作DOM元素,setState实现不了
  • 文件上传<input type=file>
  • 某些富文本编辑器,需要传入DOM元素

如何选择

  • 优先使用受控组件,符合React设计原则
  • 必须操作DO,再使用受控组件

Portals

  • 组件默认会按照既定层次嵌套渲染
  • 如何让组件渲染到父组件以外?
import React from 'react'
import ReactDOM from 'react-dom'
import './style.css'class App extends React.Component {constructor(props) {super(props)this

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 了解关于标准化的知识
  • 【Golang 面试 - 进阶题】每日 3 题(十四)
  • 算法【N皇后问题位运算实现】
  • 基于SpringBoot+Vue的校园便利平台(带1w+文档)
  • 当 iOS 系统遇到卡顿现象,有哪些有效的解决方法?
  • 使用CLI脚手架搭建Vue2项目
  • python-鼠标绘画线条程序
  • 跟《经济学人》学英文:2024年07月27日这期 AI firms will soon exhaust most of the internet’s data
  • 【Docker】Dockerfile 文件编写
  • 基于SpringBoot+Vue的校车调度管理系统(带1w+文档)
  • CF 训练2
  • 记录使用FlinkSql进行实时工作流开发
  • 如何强化学习神经网络
  • 进程状态(一)---- 运行,阻塞,挂起
  • ESP8266+STM32+阿里云保姆级教程(AT指令+MQTT)
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 2017年终总结、随想
  • java多线程
  • js算法-归并排序(merge_sort)
  • Linux后台研发超实用命令总结
  • Netty 4.1 源代码学习:线程模型
  • Vue2 SSR 的优化之旅
  • 从输入URL到页面加载发生了什么
  • 工程优化暨babel升级小记
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 微服务框架lagom
  • 详解NodeJs流之一
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​Linux·i2c驱动架构​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #### golang中【堆】的使用及底层 ####
  • $.proxy和$.extend
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (35)远程识别(又称无人机识别)(二)
  • (k8s中)docker netty OOM问题记录
  • (LeetCode) T14. Longest Common Prefix
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (十六)一篇文章学会Java的常用API
  • (十三)Flask之特殊装饰器详解
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Core引入性能分析引导优化
  • .net mvc部分视图
  • .NET 表达式计算:Expression Evaluator
  • .NET6 命令行启动及发布单个Exe文件
  • [AI 大模型] Meta LLaMA-2
  • [Android]常见的数据传递方式
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [Bada开发]初步入口函数介绍