首先我们知道Hook是可以100%向下兼容的,就是说即便在你以前的代码中加入hook写法也没有问题,同时提供了一个更直接的API包括props, state,context,refs以及生命周期,hook编写时使用的代码量也会更少,但这也是一个过渡,hook的使用去掉了class的概念,虽然以前的写法依旧可行,但新增hook的同时官方也表示没有计划移除class,这对程序员来说是很友好的,但react更推荐用户使用hook来编写代码

首先我们看一下state在传统和hook中的使用方式区别

首先演示第一个hook:

State Hook

下面用两种写法表现同样的计数器
传统:

import React from 'react'
export default class extends React.Component {constructor(props) {super(props);this.state = {count: 0,}}//添加数字并刷新add(){let {count} = this.statethis.setState({count:count+1})}render() {return <div onClick={()=>this.add()}>{this.state.count}</div>}
}

Hook:(方括号中的时候第一个参数就是自定义的state元素,可以通过第二个自定义方法来刷新这个state)

import React,{useState} from 'react'
const Main = (props) =>{//方括号中第一个参数就是自定义的state元素,可以通过第二个自定义方法来刷新这个stateconst [count,setCount] =useState(0)function add() {setCount(count+1)//刷新count值}return (<div onClick={()=>add()}>{count}</div>)
}
export default Main

在这里我们使用hook中自定义的setCount()替换了传统的setState({})

我们可以看到使用了Hook之后Main变成了一个函数,但这个函数却有自己的状态(count),同时它还可以更新自己的状态(setCount)这两个写法可以显示一个同样的计数器效果,但是可以明显感觉出来hook写出来的更简洁,更明晰。

组件函数的写法有两种:

function Main(props) {return <div />;
}

或者箭头函数

const Main= (props) => {return <div />;
}

当然,如果我们想要使用多个state 变量,它允许我们给不同的 state 变量取不同的名称:

// 声明多个 state 变量const [age, setAge] = useState(42);const [fruit, setFruit] = useState('banana');

Effect Hook

在使用前我们还是要先引入useEffect

import React, { useState, useEffect } from 'react';

这个hook可以让你在函数组件中执行副作用操作 简单来说如果你以前了解react的生命周期,那么你就可以把useEffect Hook 看做componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合

接下来我们在前面使用hook写的计数器的基础上把useEffect放进去

import React,{useState,useEffect} from 'react'
function Main(props){//方括号中第一个参数就是自定义的state元素,可以通过第二个自定义方法来刷新这个stateconst [count,setCount] =useState(0)useEffect(() => {console.log(count)});//添加function add() {setCount(count+1)//刷新count值}return (<div onClick={()=>add()}>{count}</div>)
}
export default Main

这样就可以大家不难发现useEffect 会在每次渲染后都执行

使用effect时有一些副作用是需要清除的,例如订阅外部数据源

这种情况就可以这样清除

useEffect(() => {//使用需要结束后清除的方法/*...*/return function cleanup() {//在这里清除/*...*/};
});

Hook规则:

1.只在最顶层使用 Hook
2.只在 React 函数中调用 Hook

react hook(基础详解)相关推荐

  1. React Router路由详解

    React Router路由详解 一.基础 1.安装使用 2.React Router 中通用的组件 路由组件 BrowserRouter 和 HashRouter 路径匹配组件: Route 和 S ...

  2. React 路由react-router-dom详解

    React 路由react-router-dom详解 ( 路由嵌套 + 路由传参 + 路由权限 + 路由优化 按需导入 + 404页面 ) 前面我们先了解一下 路由是什么? 路由分类有哪些?内置API ...

  3. 视频教程-React Hooks 案例详解(React 进阶必备)-其他

    React Hooks 案例详解(React 进阶必备) Leo 1978年8月生,河北石家庄人. 曾任职中软股份. 计算科学导师: 刘坤起博士. 开发的<电商分销系统>获得淘宝Top10 ...

  4. c 语言中 %是什么运算符,C 语言基础----详解C中的运算符

    C语言中又有哪些运算符呢? 如下所示: ※ 算术运算符 ※ 赋值运算符 ※ 关系运算符 ※ 逻辑运算符 ※ 三目运算符 C语言基本算术运算符如下表: 除法运算中注意: 如果相除的两个数都是整数的话,则 ...

  5. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  6. 【云原生之k8s】k8s基础详解

    [云原生之k8s]k8s基础详解 前言 一.kubernetes介绍 (1)kubernetes简介 (2)应用部署方式的演变 二.kubernetes组件 (1)kubernetes架构 (2)ma ...

  7. 微信小程序详解 php,微信小程序canvas基础详解

    canvas 元素用于在网页上绘制图形.HTML5 的 canvas 元素使用 JavaScript 在网页上绘制2D图像.本文主要和大家分享微信小程序canvas基础详解,希望能帮助到大家. 一.了 ...

  8. 线程状态,优先级,守护线程基础详解

    线程状态,优先级,守护线程基础详解 线程状态 停止线程 线程休眠 线程礼让 线程强制执行 线程状态检测 线程的优先级 守护线程 线程同步 线程状态 创建状态(new 之后就是创建状态 就绪状态(调用s ...

  9. 03 html基础详解

    02html基础详解 文章目录 02html基础详解 1.HTML编辑器 2.标签 html常用标签 3.元素 4.属性 常用属性 5.标题 水平线 注释 6.段落 折行 7.格式化标签 属性dir ...

  10. 视频教程-FPS游戏逆向与安全+UE4引擎基础详解-其他

    FPS游戏逆向与安全+UE4引擎基础详解 想把自己的知识传播出去,让更多人学习到 苏瑞兵 ¥188.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技术好课免费看 APP订阅课程,领取 ...

最新文章

  1. [分享]2007年创业给我们的提示
  2. c语言数组最大元调换,c语言数组元素交换有关问题,请高手过来看看
  3. python编程入门经典实例-Python编程语言入门经典案例
  4. 增加 oracle服务名,oracle本地服务名配置说明
  5. apple给我的感受
  6. 计算机控制技术汤楠课后答案,西安电子科大版汤楠计算机控制技术6章
  7. 巴什博奕(Bash_Game)
  8. Commons IO方便读写文件的工具类
  9. 视图机制对于数据库的安全意义
  10. 用c语言程序算自己的年龄,新手编的小程序:计算年龄和出生后经历的天数的小程序...
  11. 修复IE下列表 li 底部空行Bug
  12. Spring4.x(12)--SpringEL-HelloWorld
  13. C++ 'dynamic_cast' and Java 'instanceof' 使用对比
  14. Nancy之从403到错误处理
  15. 将所有的表中,数值类型由char,varchar改为nchar,nvarchar 的存储过程
  16. ROS学习(13)自定义机器人的ROS导航
  17. Balsamiq Mockups 入门教程
  18. Windows平台精选软件工具列表-Windows绝赞应用
  19. 图片超过200kb怎么变小?怎么把图片压缩到想要的大小?
  20. 公司网站制作需要多少钱?先了解这三个要点!

热门文章

  1. 帝国cms站群全自动采集入库程序源码分享
  2. 【虚拟机里测试Windows PE的方法】
  3. 大数据时代BI平台何去何从
  4. 北大青鸟S2MySQL内测题答案_ACCP 北大青鸟 S2 结业项目机试答案
  5. 微信分享开发:准备工作[微信公众平台以及微信中控服务配置](一)
  6. mac查看、修改文件权限
  7. iphone手机显示itunes store无法连接服务器,iPhone无法连接到iTunes Store解决方法大全...
  8. 啊哈c语言读后感500字,《麦田里的守望者》读后感读书笔记500字五篇
  9. SRM采购框架协议阶梯计价方法
  10. 如何查看Windows 桌面壁纸的位置