一、使用bind方法(构造函数内绑定)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>三大属性之state使用</title>
</head>
<body>
<div id="test1"></div>
</body>
<script src="./js/babel.min.js" charset="utf-8"></script>
<script src="./js/react.development.js" charset="utf-8"></script>
<script src="./js/react-dom.development.js" charset="utf-8"></script>
<script type="text/babel">
// 1.创建虚拟DOM
class Like extends React.Component {
constructor(props) {
super(props);
this.state = {
isLike: false
};
// 自定义函数中的this默认指向undefined,所以需要修改this的指向
this.handleClick = this.handleClick.bind(this);
}
render(){
const {isLike} = this.state;
return <h2 onClick={this.handleClick}>{isLike ? '他喜欢我' : '他不喜欢我'}</h2>;
}
handleClick(){
// 获取状态
// console.log(this); // undefined
const isLike = !this.state.isLike;
// 修改状态
this.setState({
isLike
})
}
}
// 2.渲染
ReactDOM.render(<Like/>, document.getElementById("test1"));
</script>
</html>

也可以onClick={this.handleClick.bind(this)};这种方法简洁明了,但由于 function函数 在每个render上重新分配,所以有性能影响。

二、使用箭头函数

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>三大属性之state使用</title>
</head>
<body>
<div id="test1"></div>
</body>
<script src="./js/babel.min.js" charset="utf-8"></script>
<script src="./js/react.development.js" charset="utf-8"></script>
<script src="./js/react-dom.development.js" charset="utf-8"></script>
<script type="text/babel">
// 1.创建虚拟DOM
class Like extends React.Component {
constructor(props) {
super(props);
this.state = {
isLike: false
};
// 自定义函数中的this默认指向undefined,所以需要修改this的指向
// 1.bind 2.箭头函数 3.
// this.handleClick = this.handleClick.bind(this);
}
render(){
const {isLike} = this.state;
return <h2 onClick={this.handleClick}>{isLike ? '他喜欢我' : '他不喜欢我'}</h2>;
}
// 箭头函数修正this指向
handleClick = () => {
// 获取状态
// console.log(this); // undefined
const isLike = !this.state.isLike;
// 修改状态
this.setState({
isLike
})
}
}
// 2.渲染
ReactDOM.render(<Like/>, document.getElementById("test1"));
</script>
</html>

三、在15版本中,可以使用React.createClass({})创建组件,这样会自动绑定上下文的this

React中this指向常用的2种修正方式的更多相关文章

  1. 【温故知新】——原生js中常用的四种循环方式

    一.引言 本文主要是利用一个例子,讲一下原生js中常用的四种循环方式的使用与区别: 实现效果: 在网页中弹出框输入0   网页输出“欢迎下次光临” 在网页中弹出框输入1   网页输出“查询中……” 在 ...

  2. Jmeter中的参数化常用的几种方式

    Jmeter中的参数化常用的几种方式,这里讲一下前两个方式,最后一个在csv参数化里已详细讲解. 1.用户参数 2.函数助手 3.CSV Data Set Config  一.用户参数 位置:添加-前 ...

  3. 【译】在React中实现条件渲染的7种方法

    原文地址:https://scotch.io/tutorials/7-ways-to-implement-conditional-rendering-in-react-applications 借助R ...

  4. Vue中常用的几种传值方式

    Vue中常用的几种传值方式 1. 父传子 父传子的实现方式就是通过props属性,子组件通过props属性接收从父组件传过来的值,而父组件传值的时候使用 v-bind 将子组件中预留的变量名绑定为da ...

  5. Ajax中的get和post两种请求方式的异同

    Ajax中我们经常用到get和post请求.那么什么时候用get请求,什么时候用post方式请求呢? 在做回答前我们首先要了解get和post的区别.   1. get是把参数数据队列加到提交表单的A ...

  6. Android平台中实现对XML的三种解析方式

    本文介绍在Android平台中实现对XML的三种解析方式. XML在各种开发中都广泛应用,Android也不例外.作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能. 在 ...

  7. Hibernate中双向多对多的两种配置方式

    Hibernate中双向多对多的两种配置方式 1.建立多对多双向关联关系 package cn.happy.entitys; import java.util.HashSet; import java ...

  8. [转] React 中组件间通信的几种方式

    在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 跨级组件之间通信 非嵌套组件间通信 下面依次说下这几种通 ...

  9. React 中的 定义组件的 两种方式

    React 中创建 Components 的方式有两种:Function and Class 定义一个组件最简单的方法就是写一个 JavaScript 函数 function Welcome(prop ...

随机推荐

  1. Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequences(DP)

    题目链接:http://codeforces.com/contest/1058/problem/E 题意:给出 n 个数,对于一个选定的区间,区间内的数可以通过重新排列二进制数的位置得到一个新的数,问 ...

  2. BZOJ 2527 [Poi2011]Meteors (整体二分+树状数组)

    整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include < ...

  3. CSS网站收藏

    css3动画:http://isux.tencent.com/css3/tools.html

  4. Nginx的TCP/UDP调度器

    安装nginx [root@proxy ~]# yum –y install gcc pcre-devel openssl-devel //安装依赖包 [root@proxy ~]# .tar.gz ...

  5. More development resources

    社区 名称 官网 google https://www.google.com/ github https://github.com/ StackOverflow https://stackoverfl ...

  6. MySQL 5.7半同步复制技术

    一.复制架构衍生史 在谈这个特性之前,我们先来看看MySQL的复制架构衍生史. 在2000年,MySQL 3.23.15版本引入了Replication.Replication作为一种准实时同步方式, ...

  7. java中的变量和数据类型

    变量和javascript的变量含义一样 在Java中,变量分为两种:基本类型的变量和引用类型的变量.(javascript中同样是这样的) 基本数据类型 基本数据类型是CPU可以直接进行运算的类型. ...

  8. Codeforces 959D. Mahmoud and Ehab and another array construction task(构造, 简单数论)

    Codeforces 959D. Mahmoud and Ehab and another array construction task 题意 构造一个任意两个数都互质的序列,使其字典序大等于a序列 ...

  9. Netfilter 之 钩子函数调用

    本篇主要从三层协议栈调用函数NF_HOOK说起,不断深入,分析某个钩子点中所有钩子函数的调用流程,但是本文不包含规则介绍和核心的规则匹配流程,后续文章将继续分析: NF_HOOK函数先调用了nf_ho ...

  10. python Telnet通讯

    摘要: python中telnetlib模块的使用: http://blog.csdn.net/five3/article/details/8099997 python实现telnet: http:/ ...