React Hooks

React在16.7.0-alpha.0版本中提到了Hooks的概念,目前还是Proposal阶段。

官方也陈述,接下来的90%的工作会投入到React Hooks中。

从目前官方的文档可以看出,Hooks从以下四个方面来提高React的编码。

  • state
  • 生命周期
  • content
  • 自定义方法

Hooks的主要用途是替代之前版本的 class 组件。

说明:

到目前为止,React在已发布的release版本中有该功能,想体验该功能,必须安装16.7.0-alpha.0。

```npm i react@16.7.0-alpha.0 react-dom@16.7.0-alpha.0

//或者

yarn add react@16.7.0-alpha.0 react-dom@16.7.0-alpha.0


<h1>State Hooks</h1>
<p>首先看一个React既有的版本基于 <code>class</code> 的组件.</p>

import React from 'react';

class Counter extends React.Component {

constructor(props) {

super(props);

this.state = { count: 0 };

}

render() {

const { count } = this.state;

return (

<React.Fragment>

<p>You clicked {count} times</p>

<button onClick={() => setState({count : count + 1})}>

Click me

</button>

</React.Fragment>

);

}

}


<p>接下来我们看看用Hooks是如何实现的:</p>

import React, { useState } from 'react';

export default () => {

const [count, setCount] = useState(0);

return (

<React.Fragment>

<p>You clicked { count } times</p>

<button onClick={ () => setCount(count + 1) }>

Click me

</button>

</React.Fragment>

);

};


<p>从代码结构上,减少了编码量。由原来的 <code>class</code> 组件变成 <code>function</code> 组件了。</p>
<p>不同的地方:</p>
<ul>
<li>新加入了 <code>useState</code> 方法</li>
<li>通过 <code>useState</code> 钩子解构出了 <code>state</code> 与 <code>setState</code> 方法。</li>
<li>
<code>state</code> 的默认值,直接通过 <code>useState</code> 传入</li>
<li>更新 <code>state</code> 不再使用 <code>setState</code> 方法。</li>
</ul>
<p>如果有多个 <code>state</code> 怎么定义呢?</p>

const [count, setCount] = useState(0);

const [name, setName] = useState(null);


<p><a href="https://codesandbox.io/s/pwzj74k5nq" rel="nofollow noreferrer">在线示例</a><br>推荐阅读<a href="https://kairi1227.github.io/" rel="nofollow noreferrer">《React 手稿》</a></p> 来源:https://segmentfault.com/a/1190000017261209

React手稿之State Hooks of Hooks的更多相关文章

  1. React 手稿 - Component state

    Component state 实例: import React, { PureComponent } from 'react'; export default class extends PureC ...

  2. React手稿之 React-Saga

    Redux-Saga redux-saga 是一个用于管理应用程序副作用(例如异步获取数据,访问浏览器缓存等)的javascript库,它的目标是让副作用管理更容易,执行更高效,测试更简单,处理故障更 ...

  3. React手稿 - Context

    Context Context提供了除props之外的传参数的方式. Context是全局跨组件传递数据的. API React.createContext ``` const {Provider, ...

  4. React入门---属性(state)-7

    state------>虚拟dom------>dom 这个过程是自动的,不需要触发其他事件来调用它. state中文理解:页面状态的的一个值,可以存储很多东西. 学习state的使用: ...

  5. 说说React组件的State

    说说React组件的State React的核心思想是组件化的思想,应用由组件搭建而成, 而组件中最重要的概念是State(状态). 正确定义State React把组件看成一个状态机.通过与用户的交 ...

  6. React组件的State

    React组件的State 1.正确定义State React把组件看成一个状态机.通过与用户的交互,实现不同状态,然后渲染UI,让用户界面和数据保持一致.组件的任何UI改变,都可以从State的变化 ...

  7. react native中state和ref的使用

    react native中state和ref的使用 因props是只读的,页面中需要交互的情况我们就需要用到state. 一.如何使用state 1:初始化state 第一种方式: construct ...

  8. React组件的state和props

    React组件的state和props React的数据是自顶向下单向流动的,即从父组件到子组件中,组件的数据存储在props和state中.实际上在任何应用中,数据都是必不可少的,我们需要直接的改变 ...

  9. React 三大属性state,props,refs以及组件嵌套的应用

    React 三大属性state,props,refs以及组件嵌套的应用 该项目实现了一个简单的表单输入添加列表的内容 代码如下 <!DOCTYPE html> <html> & ...

随机推荐

  1. 前端Web APIs 二

    day04 - Web APIs 学习目标: 能够说出常用的3-5个键盘事件 能够知道如何获取当前键盘按下的是哪个键 能够知道浏览器的顶级对象window 能够使用window.onload事件 能够 ...

  2. 使用Apache的反向代理会影响搜索引擎的收录和排名吗

    http://www.wocaoseo.com/thread-292-1-1.html 百度官方观点:Baiduspider对站点的抓取方式和普通用户访问一样,只要普通用户能访问到的内容,我们就能抓取 ...

  3. Vue基础(二)---- 常用特性

    常用特性分类: 表单操作 自定义指令 计算属性 侦听器 过滤器 生命周期 补充知识(数组相关API) 案例:图书管理 1.表单操作 基于Vue的表单操作:主要用于向后台传递数据 Input 单行文本 ...

  4. 用python导入20个G的json数据到Mysql数据库

    整体思路参考资料:https://blog.csdn.net/layman2016/article/details/79252499 作业:有一个16个G的跟疫情相关的json新闻大数据(articl ...

  5. 位运算处理字符大小写转换 - 关联Leetcode 709. 转成小写字母

    大写变小写.小写变大写 : 字符 ^= 32; 大写变小写.小写变小写 : 字符 |= 32; 小写变大写.大写变大写 : 字符 &= -33; 题目 实现函数 ToLowerCase(),该 ...

  6. AD18 PCB中添加中文字符串显示乱码问题解决

    该问题是由于字符串的自体类型设置问题,AD默认是[stroke],我们点击[TrueType]即可正常显示.PS:AD18搞啥呢,默认显示输入内容不行吗,找半天!!!

  7. MySQL锁这块石头似乎没有我想的那么重

    前言 前言为本人写这篇文章的牢骚,建议跳过不看.   之前好几次都想好好的学习MySQL中的锁,但是找了几篇文章,看了一些锁的类型有那么多种,一时间也没看懂是什么意思,于是跟自己说先放松下自己,便从书 ...

  8. Unity使用可空类型(Nullable Types)

    译林军 范春彦|2014-04-09 09:46|5407次浏览|Unity(375)0 你怎么确定一个Vector3,int,或float变量是否被分配了一个值?一个方便的方式就是使用可空类型! 有 ...

  9. P1004 方格取数(四维动态规划)

    题目描述 设有N \times NN×N的方格图(N \le 9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A 0 0 0 0 0 0 0 0 ...

  10. rpc之负载均衡

    使用集群,比如zk来控制注册中心,当一个服务有多个请求地址的时候,会返回多个地址. 那么就需要负载均衡来控制我们要请求哪台机器来得到请求. 方案一:随机 传入key值和key所包含的ip地址值,该地址 ...