React给state赋值的两种写法
如果你看过React的官方文档,就会对怎么给局部state赋值有一定的了解。如下代码:
class Test extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
    name:'李磊'
  };
    // 为了在回调中使用 `this`,这个绑定是必不可少的
   this.handleClick = this.handleClick.bind(this);
  }
 handleClick(){
     this.setState({name:'王磊'});
 }
  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>{this.state.name}.</h2>
     <button onClick={handleClick}>测试</button>
      </div>
    );
  }
}
官方文档指出,如果你使用class组件并使用state、定义一些方法,那么需要注意以下3点:
- 需要在 class 构造函数 constructor中为 
this.state赋初值! - 需要在 constructor中调用super(props),否则无法使用this.props;
 - 在javascript中,class的方法默认不会绑定this, 如果你忘记绑定this.handleClick并把它传入了onClick,当你调用这个函数的时候this 的值是undefined
 
但是,你是不是也见过这样的代码,如下:
class Test extends React.Component {
   state = {
      name:'李磊'
    };
  handleClick = ()=>{
    this.setState({name:'王磊'});
  }
  render() {
    return (
      <div>
        <h1>Hello, world!</h1>
        <h2>{this.state.name}.</h2>
     <button onClick={handleClick}>测试</button>
      </div>
    );
  }
}
它更简洁,不用以上注意以上三点,只要直接定义state对象中的变量即可(注意不是this.state)
这种写法叫做public class fields 语法,Create React App 默认启用此语法。
一个简单的方法可以比较两者写法到底有什么不同,那就是使用babel的Try it out来验证下吧。为了output的代码更具可读性,所以我选择了es2016
可以放大页面看,图片不能看原图
第一种写法:

第二种写法:

对比babel转换后的代码可以看出,第二种写法其实state也是定义在了constructor中。
React给state赋值的两种写法的更多相关文章
- EF架构~linq模拟left join的两种写法,性能差之千里!
		
回到目录 对于SQL左外连接我想没什么可说的,left join将左表数据都获出来,右表数据如果在左表中不存在,结果为NULL,而对于LINQ来说,要实现left join的效果,也是可以的,在进行j ...
 - Vue el与data的两种写法   &&   Object.defineProperty方法
		
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8" /> 5 & ...
 - ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法
		
ORACLE 查询一个数据表后通过遍历再插入另一个表中的两种写法 语法 第一种: 通过使用Oracle语句块 --指定文档所有部门都能查看 declare cursor TABLE_DEPT and ...
 - 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?
		
当你看见这个标题的时候,你可能会下意识的去想一下,这两种方式到底有什么样的区别呢? 且看下面的demo,自然便区分开了 /** * */ package com.b510.test; /** * Pr ...
 - [SQL]SqL给局部变量赋值有两种方法
		
给局部变量赋值有两种方法: .SET @variable_name=value .SELECT @variable_name=value 两者的区别:SET赋值语句一般用于赋给变量一个指定的常量,SE ...
 - 运算符关键字。数据区别大小写。日期范围。判空的两种写法。NOT IN的两种写法。IN范围可含NULL,但NOT IN值范围不能含NULL。
		
比较:>,<,=,>=,<=,<>(!=) 逻辑:AND,OR,NOT 范围:BETWEEN...AND... 范围:IN,NOT IN 判空:IS NULL, I ...
 - 快速排序partition过程常见的两种写法+快速排序非递归实现
		
这里不详细说明快速排序的原理,具体可参考here 快速排序主要是partition的过程,partition最常用有以下两种写法 第一种: int mypartition(vector<int& ...
 - java 路径分隔符File.separator 以及 路径两种写法"/"和"\\"
		
一.File.separator File file=new File(); 这句是新建一个文件.file.separator这个代表系统目录中的间隔符,说白了就是斜线,不过有时候需要双线,有时候是单 ...
 - iOS中表视图单元格事件用nib和storyboard的两种写法总结
		
从ios6开始,苹果公司推出了storyborad技术取代了nib的写法,这样代码量确实少写了很多,也比较简洁.但是,从学习的角度来说,阿堂认为 用nib的写法,虽然多了些代码,但是对于掌握知识和原理 ...
 
随机推荐
- Windows下获取CPU频率
			
一直想在Windows下取得CPU的时钟速度,找了好久终于找到了函数CallNtPowerInformation,要想使用它,首先必须包含powrprof.h头文件和链接库powerprof.lib. ...
 - Memcache分布式锁
			
在分布式缓存的应用中,会遇到多个客户端同时争用的问题.这个时候,需要用到分布式锁,得到锁的客户端才有操作权限 下面通过一个简单例子介绍: 这里引用的是Memcached.ClientLibrary.d ...
 - Linux 系统信息查询大全
			
Linux常用系统命令 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /etc/redhat-release ...
 - Python openCV基础操作
			
1.图片加载.显示和保存 import cv2 # 读取图片 img = cv2.imread("img1.jpg") # 生成灰色图片 imgGrey = cv2.imread( ...
 - PTA(Advanced Level)1037.Magic Coupon
			
The magic shop in Mars is offering some magic coupons. Each coupon has an integer N printed on it, m ...
 - Recurrence Algorithm Big-Oh Solution
			
Recurrence Algorithm Big-Oh Solution T(n) = T(n/2) + O(1) Binary SearchO(log n)T(n) = T(n-1) + O(1) ...
 - Python+requests 发送简单请求--》获取响应状态--》获取请求响应数据
			
Python+requests 发送简单请求-->获取响应状态-->获取请求响应数据 1.环境:安装了Python和vscode编译器(Python自带的编译器也ok).fiddler抓包 ...
 - centos7.4安装图形界面及报错处理
			
笔者实验环境:centos 7.4.1708,安装时默认最小化安装. 安装命令: yum -y update #如果不想升级内核版本可以参考笔者另一篇文章,关于update跟upgrade的区别yum ...
 - CentOS7下使用Harbor搭建Docker私有仓库
			
相关资料: Harbor官方网站:https://goharbor.io/ Harbor Github地址:https://github.com/goharbor/harbor ⒈安装Docker(必 ...
 - python如何切割字符串
			
python字符串的分割方法如下 str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s: ...