1.有状态组件

有状态组件一般用来创建复杂数据的组件,包括页面UI的更新等,并且可以访问组件的生命周期方法

用法:大多数推荐利用Es6 Class field方法创建

class Clock extends React.Component {constructor(props) {super(props);this.state = { date: new Date() };}render() {return (<div><h1>Hello, world!</h1><h2>It is {this.state.date.toLocaleTimeString()}.</h2></div>);}
}

2.this的指向问题

先来看,我们在有状态组件中定义一个事件

import React from "react";export default class Capture extends React.Component {constructor(props) {super(props)this.state = {value: 1}}handonClick() {const num = this.state.valuethis.setState({value: num++})}render() {return (<div><button onClick={this.handonClick}>点击</button><h1>{this.state.value}</h1></div>)}
} 

当我们点击事件的时候 num会进行加1 ,但是控制台打印结果令我们意想不到

我们在函数中打印一下this

handonClick() {// let num = this.state.value// console.log(this);// this.setState({//     value: num+=1// })console.log(this);}

打印结果:

这是因为 jsx类的实例方法默认没有绑定this 所以此刻函数的作用域是由调用时决定的 所以此时this指向的是window  但是React在babel的转译 js会变成严格模式 所以会变成undefind

解决方法:

1.在构造函数中利用bind call apple方法绑定this

   constructor(props) {super(props)this.state = {value: 1}this.handonClick = this.handonClick.bind(this)}

此刻可以发现解决啦  我们再来打印this 发现

2.使用箭头函数

<button onClick={()=>{this.handonClick()}}>点击</button><h1>{this.state.value}</h1>

因为箭头函数 没有单独的作用域 在函数内使用this,this会默认绑定函数外作用域上下文 此刻this指向的外围的this 我们测试一下

   render() {console.log(this);return (<div><button onClick={()=>{this.handonClick()}}>点击</button><h1>{this.state.value}</h1></div>)}

无状态组件

  • 不需要显示声明this关键字,在ES6的类声明中往往需要将函数的this关键字绑定到当前作用域,而因为函数式声明的特性,我们不需要再强制绑定。

React中this指向undefind???相关推荐

  1. this指向、数据双向流、传递参数、JSX中循环、React中样式、路由、引入资源的其它方式、create-react-app脚手架、事件处理、获取数据、UI框架推荐、pc桌面应用electronjs

    改变this指向的几种方式: //1.使用箭头函数代替原始函数写法:getState=()=>{}//2.在函数调用时给函数名加bind(this)方法:(bind中第一个参数表示修改this指 ...

  2. props写法_好程序员web前端培训React中事件的写法总结

    好程序员web前端培训React中事件的写法总结,React的事件处理和DOM元素很相似,但是语法上是有不同的: 1.react事件采用驼峰命名法,而不是纯小写. 驼峰命名法(camelCase):命 ...

  3. React中构造函数、reader和函数的调用次数和时机测试

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  4. 如何在React中使用gRPC-web

    by Mohak Puri 由Mohak Puri 如何在React中使用gRPC-web (How to use gRPC-web with React) For the past few mont ...

  5. React中的高阶组件

    React中的高阶组件 高阶组件HOC即Higher Order Component是React中用于复用组件逻辑的一种高级技巧,HOC自身不是React API的一部分,它是一种基于React的组合 ...

  6. 为什么不可变性在 React 中非常重要

    handleClick(i) {const squares = this.state.squares.slice();squares[i] = 'X';this.setState({squares: ...

  7. Immutable 操作在 React 中的实践

    作者简介 Amy 蚂蚁金服·数据体验技术团队 最近在需求开发的过程中,踩了很多因为更新引用数据但是页面不重新渲染的坑,所以对这块的内容总结了一下. 在谈及 Immutable 数据之前,我们先来聊聊 ...

  8. React 中constructor 作用

    React 中constructor 作用 react中的constructor大体有两个作用 1.初始化this.state 2.纠正方法的this的指向 constructor(props) {s ...

  9. Immutable 详解及 React 中实践 1

    本文转自:https://github.com/camsong/blog/issues/3 Shared mutable state is the root of all evil(共享的可变状态是万 ...

最新文章

  1. 让页面中的元素在网页最底部的代码片段
  2. 3、常用数据库访问接口简介
  3. 让XShell保存日志教程
  4. python爬取微博评论_用 python 爬取微博评论并手动分词制作词云
  5. c 语言中的菱形继承,C++中的菱形继承深入分析
  6. 软件项目文档_什么是软件项目的好的文档?
  7. 翻译|How to Export a Connected Component
  8. 回调函数—Java实现
  9. 自定义注解:具体的设计作用一般看过滤器的实现(以@Secured为例子部分理解)
  10. java 用户态_内核启动用户态的程序 - 但行好事 莫问前程 - JavaEye技术网站
  11. Snipaste截图贴图软件安装包下载免费的超级强大截图软件
  12. 2022年11月选购外接固态硬盘总结
  13. 基于 Petri 网的软件过程支撑环境设计
  14. 拼多多API根据ID获取商品详情
  15. 单片机长时间程序跑飞_单片机程序跑飞的三种现象、原因及解决方法
  16. anaconda使用arcpy库
  17. 站群教程SEO推广(SEO教程)
  18. HA高可用HADOOP生态群系统搭建
  19. MATLAB代码:基于雨流计数法的源-荷-储双层协同优化配置
  20. 线性代数[矩阵的秩]

热门文章

  1. 安卓rom开发教程!安卓工程师跳槽经验分享,吐血整理
  2. 如何撰写产品需求文档_需求文档模板(产品功能类需求篇)
  3. 计算机常识细节整理(一)时间复杂度和空间复杂度
  4. 中国人民大学出版社2022年校招
  5. 数据结构之线索二叉树详细解释
  6. JAVA 80行代码 写一个 万年历
  7. 网站在线安全检测介绍
  8. 软件开发自由职业者,疫情时代~不老常青藤
  9. 分形——谢尔宾斯基三角形
  10. D. CGCDSSQ (gcdST表)