React 学习小结(二)

React第一篇 (function)函数式组件 React第一篇 函数式组件 阅读详情

所有的 Tips 均为本人 OneNote 中的笔记,复制过来就是图片,懒得转文本了

第二章:React 面向组件编程

一、基本理解和使用

1.1 使用React开发者工具调试

在这里插入图片描述

1.2 函数式组件

//1.创建函数式组件
function MyComponent(){
	console.log(this); //此处的this是undefined,因为babel编译后开启了严格模式
	return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
}
//2.渲染组件到页面
ReactDOM.render(<MyComponent/>,document.getElementById('test'))

执行了 ReactDOM.render()之后,发生了什么?

  1. React解析组件标签,找到了MyComponent组件
  2. 发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面中

1.3 类式组件

//1.创建类式组件
class MyComponent extends React.Component {
	render(){
		// 类中所定义的方法,都是放在了类的原型对象上,供实例去使用
		//render是放在哪里的?—— MyComponent的原型对象上,供实例使用。
		//render中的this是谁?—— MyComponent的实例对象 <=> MyComponent组件实例对象。
		console.log('render中的this:',this);
		return <h2>我是用类定义的组件(适用于【复杂组件】的定义)</h2>
	}
}
//2.渲染组件到页面
ReactDOM.render(<MyComponent/>,document.getElementById('test'))

执行了 ReactDOM.render()之后,发生了什么?

  1. React解析组件标签,找到了MyComponent组件
  2. 发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法
  3. 将render返回的虚拟DOM转为真实DOM,随后呈现在页面中

1.4 注意要点

  1. 组件名必须首字母大写
  2. 虚拟 DOM 元素只能有一个根元素
  3. 虚拟 DOM 元素必须有结束标签
  4. 类中所定义的方法,都是放在了类的原型对象上,供实例去使用
  5. 类中的方法默认开启了局部的严格模式,所以 this 指向为 undefined

1.5 渲染类组件标签的基本流程

  1. React 内部会创建组件实例对象
  2. 调用 render() 得到虚拟 DOM , 并解析为真实 DOM
  3. 插入到指定的页面元素内部

二、组件实例三大核心属性1 —— state

2.1 举个例子

//1.创建组件
class Weather extends React.Component{
	//初始化状态
	state = {isHot:false,wind:'微风'}

	render(){
		// 解构赋值获取 state
		const {isHot,wind} = this.state
		return <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'},{wind}</h1>
	}

	//自定义方法————要用赋值语句的形式+箭头函数
	changeWeather = () => {
		const isHot = this.state.isHot
		this.setState({isHot:!isHot})
	}
}
//2.渲染组件到页面
ReactDOM.render(<Weather/>,document.getElementById('test'))

2.2 理解 state

  1. state是组件对象最重要的属性, 值是对象 (可以包含多个key-value的组合)
  2. 组件被称为"状态机", 通过更新组件的state来更新对应的页面显示 (重新渲染组件)

2.3 强烈注意

  1. 组件中 render 方法中的 this 为组件实例对象
  2. 组件自定义的方法中 this 为undefined,如何解决?
    (1)强制绑定this: 通过函数对象的 bind()
    (2)箭头函数(箭头函数中的 this 指向外层,此处指向 Weather)
  3. 状态数据,不能直接修改或更新
  4. 严重注意:状态必须通过 setState 进行更新,且更新是一种合并,不是替换
  5. 这是错误的写法:this.state.isHot = !isHot

三、组件实例三大核心属性2 —— props

函数式组件没有 state 和 resf 属性,只有 props

3.1 举个例子

//创建组件
class Person extends React.Component{
	constructor(props){
		//构造器是否接收props,是否传递给super,取决于:是否希望在构造器中通过this访问props
		//一般构造器可省略
		super(props)
		console.log('constructor',this.props);
	}

	//对标签属性进行类型、必要性的限制
	static propTypes = {
		name:PropTypes.string.isRequired, //限制name必传,且为字符串
		sex:PropTypes.string,//限制sex为字符串
		age:PropTypes.number,//限制age为数值
	}

	//指定默认标签属性值
	static defaultProps = {
		sex:'男',//sex默认值为男
		age:18 //age默认值为18
	}
			
	render(){
		const {name,age,sex} = this.props
		//props是只读的
		//this.props.name = 'jack' //此行代码会报错,因为props是只读的
		return (
			<ul>
				<li>姓名:{name}</li>
				<li>性别:{sex}</li>
				<li>年龄:{age+1}</li>
			</ul>
		)
	}
}
//渲染组件到页面
ReactDOM.render(<Person name="jerry"/>,document.getElementById('test1'))
// {...p}为批量传递props,也叫批量传递标签属性,展开运算符不能展开对象,但引入react文件,写babel代码,则可以使用展开运算符展开
// const p = {name:'老刘',age:18,sex:'女'}
// ReactDOM.render(<Person {...p}/>,document.getElementById('test3'))

3.2 理解 props

  1. 每个组件对象都会有 props(properties的简写) 属性
  2. 组件标签的所有属性都保存在 props 中

3.3 作用

  1. 通过标签属性从组件外向组件内传递变化的数据
  2. 注意: 组件内部不要修改props数据

3.4 函数组件使用 props

//创建组件
function Person (props){
	const {name,age,sex} = props
	return (
			<ul>
				<li>姓名:{name}</li>
				<li>性别:{sex}</li>
				<li>年龄:{age}</li>
			</ul>
	)
}
Person.propTypes = {
	name:PropTypes.string.isRequired, //限制name必传,且为字符串
	sex:PropTypes.string,//限制sex为字符串
	age:PropTypes.number,//限制age为数值
}
//指定默认标签属性值
Person.defaultProps = {
	sex:'男',//sex默认值为男
	age:18 //age默认值为18
}
//渲染组件到页面
ReactDOM.render(<Person name="jerry"/>,document.getElementById('test1'))

四、组件实例三大核心属性3 —— refs

4.1 举个例子

//创建组件
class Demo extends React.Component{
	//展示左侧输入框的数据
	//字符串形式的ref
	showData = ()=>{
		const {input1} = this.refs
		alert(input1.value)
	}
	//展示右侧输入框的数据
	//回调形式的ref
	showData2 = ()=>{
		const {input2} = this
		alert(input2.value)
	}
	render(){
		return(
			<div>
				<input ref="input1" type="text" placeholder="点击按钮提示数据"/>&nbsp;
				<button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
				<input ref={c => this.input2 = c } onBlur={this.showData2} type="text" placeholder="失去焦点提示数据"/>
			</div>
		)
	}
}
//渲染组件到页面
ReactDOM.render(<Demo/>,document.getElementById('test'))

4.2 理解 refs

组件内的标签可以定义ref属性来标识自己

4.3 编码

  1. 字符串形式的 ref
<input ref="input1"/>
  1. 回调形式的 ref
// 将当前节点放在组件实例自身上,并给他起了个名字叫 input1
// c 是 currentNode 的意思
<input ref = c => this.input1 = c />
  1. createRef 创建 ref 容器
// React.createRef调用后可以返回一个容器,该容器可以存储被ref所标识的节点,该容器是“专人专用”的
class Demo extends React.Component{
	//用几个就得创建几个
	myRef = React.createRef()
	myRef2 = React.createRef()
	//展示左侧输入框的数据
	showData = ()=>{
		// current 是容器内的 key
		alert(this.myRef.current.value);
	}
	//展示右侧输入框的数据
	showData2 = ()=>{
		alert(this.myRef2.current.value);
	}
	render(){
		return(
			<div>
				<input ref={this.myRef} type="text" placeholder="点击按钮提示数据"/>&nbsp;
				<button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
				<input onBlur={this.showData2} ref={this.myRef2} type="text" placeholder="失去焦点提示数据"/>&nbsp;
			</div>
		)
	}
}
//渲染组件到页面
ReactDOM.render(<Demo/>,document.getElementById('test'))

4.4 注意要点

  1. 内联形式的回调和类绑定形式的回调功能没区别,内联在更新时会多调用一次,可以直接用
  2. 字符串形式的 ref 效率不高
  3. createRef 创建容器较为繁琐,用一个就得创建一个,所以要少用

五、事件处理

  1. 通过 onXxx 属性指定事件处理函数(注意大小写)
    (1)React 使用的是自定义(合成)事件, 而不是使用的原生 DOM 事件 —————— 为了更好的兼容性
    (2)React 中的事件是通过事件委托方式处理的(委托给组件最外层的元素) ————————为了高效
  2. 通过 event.target 得到发生事件的 DOM 元素对象 ——————————不要过度使用 ref
showData2 = (event)=>{
	alert(event.target.value);
}

六、收集表单数据

6.1 受控组件

特性:将输入存入状态(state),用时再取(可以省略 ref)

//创建组件
class Login extends React.Component{
	//初始化状态
	state = {
		username:'', //用户名
		password:'' //密码
	}
	//保存用户名到状态中
	saveUsername = (event)=>{
		this.setState({username:event.target.value})
	}
	//保存密码到状态中
	savePassword = (event)=>{
		this.setState({password:event.target.value})
	}
	//表单提交的回调
	handleSubmit = (event)=>{
		event.preventDefault() //阻止表单提交
		const {username,password} = this.state
		alert(`你输入的用户名是:${username},你输入的密码是:${password}`)
	}
	render(){
		return(
			<form onSubmit={this.handleSubmit}>
				用户名:<input onChange={this.saveUsername} type="text" name="username"/>
				密码:<input onChange={this.savePassword} type="password" name="password"/>
				<button>登录</button>
			</form>
		)
	}
}
//渲染组件
ReactDOM.render(<Login/>,document.getElementById('test'))

6.2 非受控组件

特性:输入现用现取

//创建组件
class Login extends React.Component{
	handleSubmit = (event)=>{
		event.preventDefault() //阻止表单提交
		const {username,password} = this
		alert(`你输入的用户名是:${username.value},你输入的密码是:${password.value}`)
	}
	render(){
		return(
			<form onSubmit={this.handleSubmit}>
				用户名:<input ref={c => this.username = c} type="text" name="username"/>
				密码:<input ref={c => this.password = c} type="password" name="password"/>
				<button>登录</button>
			</form>
		)
	}
}
//渲染组件
ReactDOM.render(<Login/>,document.getElementById('test'))

七、高阶函数 —— 函数柯里化

高阶函数:如果一个函数符合下面2个规范中的任何一个,那该函数就是高阶函数

  1. 若A函数,接收的参数是一个函数,那么A就可以称之为高阶函数
  2. 若A函数,调用的返回值依然是一个函数,那么A就可以称之为高阶函数

常见的高阶函数有:Promise、setTimeout、arr.map()等等

函数的柯里化:通过函数调用继续返回函数的方式,实现多次接收参数最后统一处理的函数编码形式

function sum(a){
	return(b)=>{
		return (c)=>{
			return a+b+c
		}
	}
}

以上面的收集表单数据为例:

//保存表单数据到状态中
// 根据 data 的类型返回 event.target.value
saveFormData = (dataType)=>{
	return (event)=>{
		this.setState({[dataType]:event.target.value})
	}
}

// 不用柯里化的写法
saveFormData = (dataType,event)=>{
	this.setState({[dataType]:event.target.value})
}

八、组件的生命周期

8.1 理解生命周期

  1. 组件从创建到死亡它会经历一些特定的阶段
  2. React 组件中包含一系列钩子函数(生命周期回调函数,可以理解为在需要的时候将这个函数钩出来), 会在特定的时刻调用(生命周期回调函数 <=> 生命周期钩子函数 <=> 生命周期函数 <=> 生命周期钩子)
  3. 我们在定义组件时,会在特定的生命周期回调函数中,做特定的工作

8.2 生命周期流程图(旧)

生命周期的三个阶段(旧)

  1. 初始化阶段: 由 ReactDOM.render() 触发—初次渲染
    1.constructor():构造器
    2.componentWillMount():组件将要挂载的钩子
    3.render():必须使用的一个
    4.componentDidMount():组件挂载完毕的钩子,一般在这个钩子中做一些初始化的事,例如:开启定时器、发送网络请求、订阅消息

  2. 更新阶段: 由组件内部 this.setSate() 或父组件重新 render 触发
    1.shouldComponentUpdate():控制组件更新的“阀门”,返回值为true则继续进行,false则直接打断,如果不写,底层默认返回值为true

    2.componentWillUpdate():组件将要更新的钩子
    3.render()
    4.componentDidUpdate():组件更新完毕的钩子

  3. 卸载组件: 由 ReactDOM.unmountComponentAtNode() 触发
    1.componentWillUnmount():组件将要卸载的钩子,一般在这个钩子中做一些收尾的事,例如:关闭定时器、取消订阅消息

8.3 生命周期(旧)举例

//创建组件
class Count extends React.Component{
	//构造器
	constructor(props){
		console.log('Count---constructor');
		super(props)
		//初始化状态
		this.state = {count:0}
	}
	//加1按钮的回调
	add = ()=>{
		//获取原状态
		const {count} = this.state
		//更新状态
		this.setState({count:count+1})
	}

	//卸载组件按钮的回调
	death = ()=>{
		ReactDOM.unmountComponentAtNode(document.getElementById('test'))
	}
	//强制更新按钮的回调
	force = ()=>{
		this.forceUpdate()
	}
	//组件将要挂载的钩子
	componentWillMount(){
		console.log('Count---componentWillMount');
	}
	//组件挂载完毕的钩子
	componentDidMount(){
		console.log('Count---componentDidMount');
	}
	//组件将要卸载的钩子
	componentWillUnmount(){
		console.log('Count---componentWillUnmount');
	}
	//控制组件更新的“阀门”
	shouldComponentUpdate(){
		console.log('Count---shouldComponentUpdate');
		return true
	}
	//组件将要更新的钩子
	componentWillUpdate(){
		console.log('Count---componentWillUpdate');
	}
	//组件更新完毕的钩子
	componentDidUpdate(){
		console.log('Count---componentDidUpdate');
	}
	render(){
		console.log('Count---render');
		const {count} = this.state
		return(
			<div>
				<h2>当前求和为:{count}</h2>
				<button onClick={this.add}>点我+1</button>
				<button onClick={this.death}>卸载组件</button>
				<button onClick={this.force}>不更改任何状态中的数据,强制更新一下</button>
			</div>
		)
	}
}

8.4 生命周期流程图(新)

新旧生命周期区别:

  1. 废除了旧生命周期的三个钩子: componentWillMount、 componentWillReceiveProps 和
    componentWillUpdata
  2. 新增了俩钩子: getDerivedStateFromProps 和 getSnapshotBeforeUpdate
    1.getDerivedStateFromProps:从 props 中获取派生的 state,即 state 值在任何时候都取决于 props
    2.getSnapshotBeforeUpdate:在组件更新前获取一次快照,返回值可以是任意类型

8.5 重要的钩子

  1. render:初始化渲染或更新渲染调用
  2. componentDidMount:开启监听, 发送 ajax 请求
  3. componentWillUnmount:做一些收尾工作, 如: 清理定时器

8.6 即将废弃的钩子

  1. componentWillMount
  2. componentWillReceiveProps
  3. componentWillUpdate

这几个钩子都带有 will,现在使用会出现警告,下一个大版本需要加上UNSAFE_前缀才能使用,以后可能会被彻底废弃,不建议使用

九、虚拟 DOM 与 DOM Diffing 算法

9.1 基本原理图

在这里插入图片描述

9.2 补充:key 的作用

经典面试题:

  1. react/vue 中的 key 有什么作用?(key 的内部原理是什么?)
  2. 为什么遍历列表时,key 最好不要用 index?
1.虚拟DOM中key的作用:
	(1)简单的说: key是虚拟DOM对象的标识, 在更新显示时key起着极其重要的作用
	(2)详细的说: 当状态中的数据发生变化时,react会根据【新数据】生成【新的虚拟DOM】, 随后React进行【新虚拟DOM】与【旧虚拟DOM】的diff比较,比较规则如下:
		a. 旧虚拟DOM中找到了与新虚拟DOM相同的key:
			a1.若虚拟DOM中内容没变, 直接使用之前的真实DOM
			a2.若虚拟DOM中内容变了, 则生成新的真实DOM,随后替换掉页面中之前的真实DOM
		b. 旧虚拟DOM中未找到与新虚拟DOM相同的key:
			根据数据创建新的真实DOM,随后渲染到到页面

2.用index作为key可能会引发的问题:
	(1)若对数据进行:逆序添加、逆序删除等破坏顺序操作:
		会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低
	(2)如果结构中还包含输入类的DOM:
		会产生错误DOM更新 ==> 界面有问题
	(3)注意!如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的

3.开发中如何选择key:
	(1)最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值
	(2)如果确定只是简单的展示数据,用index也是可以的

React 系列小结:

React 学习小结(一)
React 学习小结(二)
React 学习小结(三)
React 学习小结(四)
React 系列小结(五)
React 系列小结(六)

React实战-如何在ReactJs中调用Google、Baidu地图 React实战-如何在ReactJs中调用Google、Baidu地图 在这个互联网时代,对地图的运用已经成为Web、移动各类应用的必选项。国内外各大地图应用提供商均有开放的Api供大家使用,当然更具使用的功能会提供付费版和免费版,如果仅仅只是小的应用或者练手,完全可以调用其免费版。调用的方式也很简单,跟你调用其他的第三方库类似。但是由于ReactJs的实现方式存在一些特殊性,其调用Google 阅读详情

相关推荐

ReactJS_1:从基础到进阶的全面学习

本文还有配套的精品资源,点击获取 简介:ReactJS是由Facebook开发的开源JavaScript库,以其组件化开发和虚拟DOM特性为核心,用于构建高效的用户界面。本资料包提供了从基础知识到高级应用的完整学习路径,包括但不限于组件的props和state管理、React Router路由配置、React Hooks的使用、环境配置、测试工具应用、性能优化技巧,以及与其...

weixin_35935514的博客 1512

【译】函数式的 setState 是 React 的未来

本文翻译自:Functional setState is the future of React – freeCodeCamp.org 译者注:昨天自己有遇到一个 setState 的坑,就是【React 踩坑记】setState 这样用可能会出错!这篇文章里记录的,上网 Google 了下看到这一篇,关于 setState,这篇文章讲解的很详细深入

weixin_34392435的博客 397

重访时间与覆盖分析的stk操作

1.打开stk 2.创建一个新的场景,命名为Test,选择地球为场景星球,若为金星,可在Central Body里选择Venus(金星自转周期慢,自转周期243天,卫星轨道变化不明显)(其中start stop时间可设置长一些) 3.插入一个AreaTarget或者place,以AreaTarget为例 选择Pattern,Add三个点(用法可见前面的博客,有时候编程的代码也可以帮助理解stk的操作) 4.插入Satellite,选择Orbit Wizard(若想设置卫星的六根数也可

weixin_42664107的博客 1万+

react入坑之setState注意事项

  不要直接改变state 直接对组件state中的属性赋值将不会触发DOM更新,因为React并不知道state被改变了 state的更新可能是异步的 React会一次处理多个对setState的调用以提高性能,所以调用setState()时不应当直接基于另外一些来自state或props中的属性进行计算,很有可能当前计算的值并不是最终的值,当用于计算的另一些值再次变化后,React并不...

chiuwingyan的博客 9548

STM32F4XX软件模拟I2C实现MPU6050姿态数据采集

本文详细介绍了在STM32F4XX平台上通过软件模拟I2C驱动MPU6050传感器实现姿态数据采集的完整方案。内容涵盖软件I2C的GPIO配置、核心通信函数实现、MPU6050寄存器配置详解以及数据读取处理流程,为硬件资源受限的嵌入式应用提供了灵活的解决方案,并分享了调试技巧与常见问题处理方法。

butter的博客 678

别再乱点U盘里的.exe了!手把手教你清除‘Usb Disk.exe’病毒并恢复隐藏文件

本文详细介绍了如何识别和清除U盘病毒(如Usb Disk.exe),并提供从终止病毒进程到恢复隐藏文件的完整步骤。通过禁用自动播放、清理注册表和使用命令行工具,帮助用户彻底清除病毒并预防未来感染,确保数据安全。

weixin_42530732的博客 596

react中setState与展开运算符

setState是对象的合并而不是替换,当需要更新对象的时候,可以使用ES6展开运算符展开原来的对象,与新的的对象合并。 原因: 因为setState会对新对象与旧对象进行一个浅比较,而直接使用=赋值,会导致新对象与旧对象地址相同,setState不会进行更新。 使用展开运算符会返回一个新的地址,所以会进行更新。 ...

石开的博客 593

python设计俄罗斯方块(附源码)

【代码】python设计俄罗斯方块(附源码)

牧魂的博客 2061

纯javascript代码修改react 的输入框的值

背景 我们有一个老的项目在维护,项目是使用react-dom@16.8.6实现的。也就是react开发的,但是因为某种原因,暂时找不到源码了。时间紧任务重,必须赶紧解决问题。 简化需求: 有一个react实现的文本输入框,我要实现页面加载完成后自动赋值一个默认的值。 失败的代码: 一开始我尝试直接修改 var usernameInput = document.getElementsByName('userId')[0]; usernameInput.value='new value' 这个表面上没有问题,

lxyoucan的博客 4335

审稿人看了直呼内行:多组学整合分析——科研小白进阶之路

多组学,多平台分析解决方案

pysonger的博客 3945

光电容积脉搏波PPG信号分析笔记

脉搏波信号PPG分析笔记

teresa_zp的专栏 6478

React学习小结(二)

一、组件的嵌套 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <script src="react.min.js" type="text/javascript" c...

weixin_30493401的博客 93

基于ESP32的智能无线广播系统开发博客

通过本项目的开发,我们成功地实现了基于ESP32的智能无线广播系统。该系统不仅具备传统广播的功能,还实现了通过Wi-Fi无线传输音频、实时广播和智能控制等多种先进功能。未来,随着技术的进一步发展,我们还可以扩展更多功能,如智能推荐广播内容、支持语音识别和控制等。希望本项目能够为嵌入式开发人员提供一些思路和参考,帮助大家在实际开发中更好地应用ESP32平台,开发出更加智能和实用的无线广播系统。

2201_76125393的博客 424

入门指南:从零开始学习ReactJS

ReactJS是一个强大的JavaScript库,用于构建用户界面。它由Facebook开发,并于2013年首次发布。自那时以来,React已成为前端开发中最受欢迎的库之一,许多公司和开发者都在使用它来构建高性能、交互式的Web应用程序。本文将向您介绍ReactJS的基础知识,并通过实践示例来帮助您入门。我们将从React的核心概念开始,逐步深入,直到您能够构建简单的React应用为止。

努力是为了站在万人之中,成为别人的光 2万+

RK3588 Buildroot 新建板级DTS

在rk3588 linux开发过程中,新创建板型主要基于硬件差异化、软件适配与优化、项目定制化等多方面需求。

501846585_QQAndroid_java 1300

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

React学习教程,从入门到精通, ReactJS - 安装:初学者指南(3)

在我们开始安装之前,让我们快速了解一下ReactJS是什么。React是一个流行的JavaScript库,用于构建用户界面,尤其是单页应用程序。它主要是关于创建可重用的UI组件,这些组件管理自己的状态,使得构建复杂的界面变得更加容易。

qq_45746668的博客 2531

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

使用reactjs-popup创建React模态框(Modal)的完整指南

在现代Web开发中,模态框(Modal)是一种常见的UI组件,用于显示重要信息、收集用户输入或确认操作。reactjs-popup库提供了一种简单而强大的方式来创建React模态框,无需复杂的配置即可实现专业级的弹窗效果。 ## 基础模态框实现 使用reactjs-popup创建基础模态框非常简单,只需在Popup组件上添加`modal`属性即可: ```jsx import Popup f

gitblog_00215的博客 1329

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

react方面的pdf_ReactJS中文API.pdf

ReactJS中文API1.顶层API1.1ReactReact是 React 库的入口。如果使用的是预编译包 ,则 React是全局的 ;如果使用 CommonJS 模块系统,则可以用 require() 函数引入React。1.1.1React.createClassReactClasscreateClass(objectspecification)创建一个组件类 ,并作出定义。组件实现了 r...

weixin_39571087的博客 1384

使用reactjs-popup创建React Modal

如今,模态是React应用程序中最常用的组件之一,通过一种简单的方法来创建React Modals将帮助您在即将到来的React应用程序中快速了解与Modals相关的功能。 在本教程中,我们将仅使用22行代码构建一个简单的React Modal。 下面的gif可以帮助您了解我们正在尝试构建的内容 开始吧 创建React项目 首先,使用create-react-app CLI创建一个简单...

编程故事的地方 1936

reactjs-vite-tailwindcss-boilerplate核心功能揭秘:为什么它是React项目的终极选择

reactjs-vite-tailwindcss-boilerplate是一个集成了Vite、React 18、TypeScript、Vitest、Testing Library、TailwindCSS 3、Eslint和Prettier的强大项目模板,为React开发者提供了一站式的开发解决方案,帮助快速构建现代化的Web应用。 ## 🌟 核心技术栈解析 ### Vite:极速构建体验 作

gitblog_00620的博客 2004

ReactJS学习小结

ReactJS小结 关于ReactJS主要有以下几点: 1、ReactJs是基于组件化的开发,所以最终你的页面应该是由若干个小组件组成的大组件。 2、可以通过属性,将值传递到组件内部,同理也可以通过属性将内部的结果传递到父级组件(留给大家研究);要对某些值的变化做DOM操作的,要把这些值放到state中。 3、为组件添加外部css样式时,类名应该写成className而不是class;添加内部...

炒饭的博客 297

ReactJS 101代码规范终极指南:Airbnb React/JSX风格指南的实际应用

ReactJS 101作为React开发者的入门指南,不仅教授React基础知识,还特别强调了代码规范的重要性。在React开发中,遵循统一的代码规范是提升团队协作效率和代码质量的关键。本文将深入探讨如何在ReactJS 101项目中实际应用Airbnb React/JSX风格指南,帮助开发者编写更专业、更易维护的React代码。 ## 📋 为什么需要React代码规范? 在团队协作开发中,

gitblog_00879的博客 1860

如何学习ReactJS:

文章目录1、基本条件2、HTML,CSS,JavaScript3、Javascript的ES6功能4、NodeJS基础和代码编辑器导入:一旦在项目中使用NPM安装了Node模块,就必须使用'import'关键字来使用该模块。导出:在创建模块/组件时使用此关键字,而您只需要返回一部分,而不必返回所有方法和变量。5、学习ReactJS 1、基本条件 HTML,CSS和JavaScript的基本知识。...

X W F 486

Reactjs-Popup 组件库全面解析:一站式弹窗解决方案

Reactjs-Popup 是一个轻量级的 React 弹窗组件库,它可以帮助开发者快速构建各种类型的交互式弹窗组件。这个库最突出的特点是它的多功能性 - 通过单一组件即可实现模态框(Modal)、工具提示(Tooltip)和菜单(Menu)等多种交互元素。 ## 核心特性 1. **多合一解决方案** - 一个组件支持多种弹窗类型 - 无需为不同场景引入多个库 2. **极致轻

gitblog_01200的博客 1313

reactjs构建工具_10种ReactJS工具可提升您的Web开发技能

reactjs构建工具 您知道一眼提交的大多数求职简历都会被拒绝吗? 如果您尝试开始进行Web开发,那将是一个艰巨的事实,但是有很多方法可以改善您为潜在的雇主和客户提供的服务。 对于应用程序开发人员而言,现在是提高技能的好时机,开源是专业开发的最佳途径。 您无需上大学即可学习新的开源技能; 您需要的只是方向感和自律感。 ReactJS是您成为一名成功的Web开发人员时应明智学习的众多技能之一...

cumj63710的博客 2054

Reactjs-popup终极指南:一站式解决React弹窗、工具提示和菜单需求

Reactjs-popup是一个功能强大的React弹窗组件,能够帮助开发者轻松创建简单和复杂的模态框(Modals)、工具提示(Tooltips)和菜单(Menus)。它是一个真正的一站式解决方案,让你无需为不同类型的弹出组件寻找多个库。 ## 为什么选择Reactjs-popup? Reactjs-popup之所以值得你考虑,有以下几个关键原因: - **一站式解决方案**:一个库满足模

gitblog_00460的博客 1231
上一篇: React 学习小结(一)
下一篇: React组件化开发实现TodoList待做列表
APythonC
博客等级 码龄7年 23粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值