热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

appcrash事件怎么解决_React实战实现评分小组的必备武器:React事件(5)

网页是组件构成的,组件是一系列标签形成的单一功能。所以考虑组件无非也就三件事,结构、表现、和行为。结构JSX搞定了(当然JSX不仅仅干这个

网页是组件构成的,组件是一系列标签形成的单一功能。所以考虑组件无非也就三件事,结构、表现、和行为。结构JSX搞定了(当然JSX不仅仅干这个),表现是CSS的事儿,我们重点说下行为,也就是事件和钩子。

事件好说,就是户干了啥事儿,然后有什么样的相应。钩子就是在组件怎么样的时候,干什么事儿。

本文先说事件,因为这个简单的让人发指,钩子用到了我们再说。

事件还是老话,你把原生组件我讲那篇文章看懂了,react就很轻松了,我们先走起一个例子。

大家可以直接使用我准备好的起始文件,替换你的src整个文件夹就行。

56acaad9a258fb465492c9ecb1bc20f6.png

地址:https://github.com/leolau2012/react-basic-tutorial.git

React中事件的写法

先别管别的,我们现在RatingStar.js里面扔进去,以下:

import React, { Component } from 'react'
import './style.css'
class RatingStar extends Component {constructor(props) {super(props)this.state = {score: 0}}handleClick(ev) {console.log(ev.target);}render() {return (

4分
);}
}

export default RatingStar;

这里要注意两点:

1.onClick = {this.handleClick} 这里的事件都要加on而且Click要大写

2.this.handleClick 需被单大括号包裹

this的问题

说重点了,但是往回看最开始的例子大家就知道代码是这样的:

handleClick(ev) {this.setState({score: Number(ev.target.dataset.index) + 1});
}

但是,我们加上去以后居然报错了,

ea3c8bea52297f51dacf51eb47c00f99.png

我们先看一眼this是谁,

e90d2e2e7a089c2e503e1923a47a785f.png
695ba34c7eacacbb6741bd6407cac5cb.gif

大家先不用急,容我慢慢解释。

9b8b93b43dd1ec1b5e23c3bd80145879.png

下面就是最重要的一个东西 -关于组件里面的this问题。

一般在某个类的实例方法里面的 this 指的是这个实例本身。但是在上面我们把 this 打印出来,你会看到 this 是undefined。

这是因为 React.js 调用你所传给它的方法的时候,并不是通过对象方法的方式调用(this.handleClick),而是直接通过函数调用 handleClick所以事件监听函数内并不能通过 this 获取到实例。而严格模式下直接全局调用一个函数,它的this是undefined。这里注意你可以不懂我说的上面这些话,但是你会解决就好了。这个在我们原生js组件又遇到过这个情况说后面解释。这里我们解释了。

解决this的指向

解决方案也简单:

handleClick = (ev)=> {console.log(this);
}

这样就可以了,很多人会用bind 矫正this 我不建议,尽量大家多用箭头函数。

最终代码:

import React, { Component } from 'react'
import './style.css'
class RatingStar extends Component {constructor(props) {super(props)this.state = {score: 0}}handleClick = (ev)=> {console.log(this.setState);this.setState({score: Number(ev.target.dataset.index) + 1});}render() {return (

4分
);}
}

export default RatingStar;

最终大家会发现setState就有了,而且事件也好了。这篇文章我们讲事件怎么用,下篇我们说组件的 state 和 setState

结语:

1.通过onClick事件在React中的使用,举一反三使用 React.js 提供了一系列的 on* 事件。

2.this调用不加括号,class变成className。

额外:将代码下载下来注意组件的组织。



推荐阅读
  • 本文介绍了在wepy中运用小顺序页面受权的计划,包含了用户点击作废后的从新受权计划。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用elementui分页组件进行分页功能的改写,只需一行代码即可调用。通过封装分页组件,避免在每个页面都写跳转请求的重复代码。详细的代码示例和使用方法在正文中给出。 ... [详细]
  • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
  • Vue3中setup函数的参数props和context配置详解
    本文详细介绍了Vue3中setup函数的参数props和context的配置方法,包括props的接收和配置声明,以及未通过props进行接收配置时的输出值。同时还介绍了父组件传递给子组件的值和模板的相关内容。阅读本文后,读者将对Vue3中setup函数的参数props和context的配置有更深入的理解。 ... [详细]
  • 本文讨论了将HashRouter改为Router后,页面全部变为空白页且没有报错的问题。作者提到了在实际部署中需要在服务端进行配置以避免刷新404的问题,并分享了route/index.js中hash模式的配置。文章还提到了在vueJs项目中遇到过类似的问题。 ... [详细]
  • Python已成为全球最受欢迎的编程语言之一,然而Python程序的安全运行存在一定的风险。本文介绍了Python程序安全运行需要满足的三个条件,即系统路径上的每个条目都处于安全的位置、"主脚本"所在的目录始终位于系统路径中、若python命令使用-c和-m选项,调用程序的目录也必须是安全的。同时,文章还提出了一些预防措施,如避免将下载文件夹作为当前工作目录、使用pip所在路径而不是直接使用python命令等。对于初学Python的读者来说,这些内容将有所帮助。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • MPLS VP恩 后门链路shamlink实验及配置步骤
    本文介绍了MPLS VP恩 后门链路shamlink的实验步骤及配置过程,包括拓扑、CE1、PE1、P1、P2、PE2和CE2的配置。详细讲解了shamlink实验的目的和操作步骤,帮助读者理解和实践该技术。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
author-avatar
159dzhqian449_734
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有