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


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

import React from 'react';

class Counter extends React.Component {

constructor(props) {

super(props);

  1. 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>

);

}

}


  1. <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>

);

};


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

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

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


  1. <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>
  2. 来源: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. Mybatis—curd

    Mybatis简介: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  2. LR与LR?

    目录 逻辑回归与线性回归 逻辑回归 1.建立目标函数 2. 梯度求解 3. 实现 线性回归 1. 建立目标函数 2. 求解 3. 实现 逻辑回归与交叉熵 逻辑回归与线性回归 逻辑回归 线性回归 目标函 ...

  3. 网站更换服务器或IP对排名有影响吗

    http://www.wocaoseo.com/thread-287-1-1.html 网站更换服务器或IP对排名有影响吗 复制代码 百度官方观点:原则上是不会的.除非-新换的服务器太糟糕,三天两头访 ...

  4. UnitTest框架的快速构建与运行

    我们先来简单介绍一下unittest框架,先上代码: 1.建立结构的文件夹: 注意,上面的文件夹都是package,也就是说你在new新建文件夹的时候不要选directory,而是要选package: ...

  5. openCV - 1. 加载、修改、保存图像

    加载 cv::imread 修改 cv::cvtColor 保存 cv::imwrite 加载图像cv::imread imread功能是加载图像文件成为一个Mat对象,其中第一个参数表示图像文件名称 ...

  6. 深入理解C++中的new/delete和malloc/free动态内存管理

    malloc/free和new/delete的区别 malloc/free是C/C++标准库的函数:new/delete是C++操作符. malloc/free只是动态分配内存空间/释放空间:new/ ...

  7. [ASP.NET Core开发实战]基础篇04 主机

    主机定义 主机是封闭应用资源的对象. 设置主机 主机通常由 Program 类中的代码配置.生成和运行. HTTP项目(ASP.NET Core项目)创建泛型主机: public class Prog ...

  8. Android开发之获取APP的应用程序名称以及版本名称信息java工具类

    //跟App相关的辅助类 public class AppUtils { private AppUtils() { /* cannot be instantiated */ throw new Uns ...

  9. 挂载磁盘不成功显示mount: /mnt: wrong fs type, bad option, bad superblock..............

    [23:25:32 root@8 ~]#mount /dev/sdb2 /mntmount: /mnt: wrong fs type, bad option, bad superblock on /d ...

  10. Hexo-butterfly-magicv3.0.1(持续更新中....)

    介绍 Hexo-butterfly魔改v3.0.1 软件架构 本项目是基于Hexo静态博客的个性主题---蝴蝶主题魔改版 安装教程 克隆 安装依赖 hexo命令生成public文件夹 启动hexo-s ...