React4.事件处理与类组件状态
Posted 阿拉的梦想
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React4.事件处理与类组件状态相关的知识,希望对你有一定的参考价值。
【React】4.事件处理与类组件状态
1. 事件处理
所谓事件, 就是点击事件、双击事件等等;
1.1 事件绑定
React 事件綁定语法与 DOM 事件语法相似
语法: on+事件名称=事件处理程序
,比如:onClick=()=>
注意: React 事件采用驼蜂命名法
,比如:onMouseEnter、onFocus
在类组件中绑定事件:
import React from 'react'
/**
* 定义一个类组件
*/
class Fun3 extends React.Component
类中定义一个函数处理器
clickHandler()
console.log("hello")
render()
return (
//绑定单击事件,必须使用this
<button onClick=this.clickHandler>click me</button>
)
//导出组件,以供使用
export default Fun3
在函数中绑定事件:
import render from '@testing-library/react'
import React from 'react'
import ReactDOM from 'react-dom/client'
//导入组件
import Fun3 from './common/Fun3'
const root = ReactDOM.createRoot(document.getElementById("root"))
function Fun4()
//事件处理函数
function clickMe()
console.log("hello 4")
return (
//绑定事件,无需this
<button onClick=clickMe>click me 4 </button>
)
//使用组件,用标签符号来调用组件
root.render(<Fun4 />)
1.2.事件对象
- 可以
通过事件处理程序的参数
获取到事件对象 - React 中的事件对象叫做:
合成事件(
对象) - 合成事件:兼容所有浏览器,无需担心跨浏览器兼容性问题
示例:
使用事件对象e,实现点击a标签时阻止跳转
import React from 'react'
import ReactDOM from 'react-dom/client'
const root = ReactDOM.createRoot(document.getElementById("root"))
function Fun4()
//事件处理函数
function clickMe(e)
console.log("hello 4")
//阻止浏览器的默认行为,这样只会打印,不会跳转了
e.preventDefault();
return (
//绑定事件
<a href='http://www.baidu.com' onClick=clickMe> baidu </a>
)
//使用组件,用标签符号来调用组件
root.render(<Fun4 />)
2. 组件状态
函数组件没有状态,类组件才有状态。
状态关键字为state
,是一个对象,里面可以是任意数据
初始化状态:
state =
count:0,name:"tom"
使用状态:
this.state.count
设置状态:
只能用setState()
更新状态,this.state.count=2是无效的。
只会更改指定key的值,不会影响state中的其他数据。
this.setState(count:1)
数据驱动视图,
当state变化后,会重新渲染页面。
示例:
用状态保存计数,每次点击+1
Fun3.js
import React from 'react'
/**
* 定义一个类组件
*/
class Fun3 extends React.Component
//初始化state
state =
count: 0
//必须使用箭头函数才能操作state,否则报错
clickHandler = (e) =>
this.setState( count: this.state.count + 1 )
console.log(this.state.count)
render()
return (
//绑定单击事件,必须使用this
<button onClick=this.clickHandler>click me this.state.count</button>
)
//导出组件,以供使用
export default Fun3
index.js
import React from 'react'
import ReactDOM from 'react-dom/client'
import Fun3 from './common/Fun3'
const root = ReactDOM.createRoot(document.getElementById("root"))
//使用组件,用标签符号来调用组件
root.render(<Fun3 />)
效果:
3. 事件绑定this指向
当我们直接在函数里面使用this时,可能发生
报错:Cannot read properties of undefined (reading ‘state’)
3.1 使用箭头函数绑定
下面介绍了三种箭头函数解决this的方式:
import React from 'react'
/**
* 定义一个类组件
*/
class Fun3 extends React.Component
//初始化state
state =
count: 0
//解决方式1(推荐)
clickHandler = (e) =>
this.setState( count: this.state.count + 1 )
console.log(this.state.count)
//解决方式2
clickHandler2()
this.setState( count: this.state.count + 1 )
console.log(this.state.count)
render()
return (
//调用方式1
//<button onClick=this.clickHandler>click me this.state.count</button>
//调用方式2
//<button onClick=() => this.clickHandler2()>click me this.state.count</button>
//解决方式3
<button onClick=() => this.setState( count: this.state.count + 1 )>click me this.state.count</button>
)
//导出组件,以供使用
export default Fun3
3.2 在构造器中使用bind方法绑定
import React from 'react'
/**
* 定义一个类组件
*/
class Fun3 extends React.Component
constructor()
super()
//给函数绑定this
this.clickHandler=this.clickHandler.bind(this)
//初始化state
state =
count: 0
//解决方式2
clickHandler()
this.setState( count: this.state.count + 1 )
console.log(this.state.count)
render()
return (
<button onClick=this.clickHandler>click me this.state.count</button>
)
//导出组件,以供使用
export default Fun3
以上是关于React4.事件处理与类组件状态的主要内容,如果未能解决你的问题,请参考以下文章
React,Typescript中无状态功能组件内的事件处理
如何使用 Vue.js 路由器将状态和事件处理程序作为道具传递给子组件?
ReactReact全家桶组件+组件三大核心属性state-props-refs+事件处理与条件渲染+列表与表单+状态提升与组合+高阶函数与函数+函数柯里化
ReactReact全家桶组件+组件三大核心属性state-props-refs+事件处理与条件渲染+列表与表单+状态提升与组合+高阶函数与函数+函数柯里化