React Hook 是什么

1、没有比官网说的更好的 HOOK

1. React Hook 官方

2. 用我们自己的话说,它是一个钩子函数,用来处理组件间的状态的一个方法,暂时理解为一个高阶函数吧。

2、React Hook 可以做什么

对于已经习惯使用class 的一些同学,使用生命周期函数也可以很方便的帮我处理一些状态,比如render函数渲染, compnentDidMount 里调用接口,comnentWillUnmount销毁组件...,熟练使用这些生命周期函数也不是说有问题,但是在某一些事情上,比如在更新状态的时候,需要对比下组件前后的数据,需不需要更新,如componentDidUpdate(prevProps, prevState), 组件销毁的时候,我们是不是还要处理下其他脏活累活等等。上面的多余的操作,React Hook 可以在 hook 函数里面,帮我们做了这些事。

3、React Hook 怎么做(用)

我们继续沿用官网的demo来讲,(官网已经讲的很透彻了)

import React, { useState } from 'react';

function Example() {
// 声明一个新的叫做 “count” 的 state 变量
const [count, setCount] = useState(0); return (
<div>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
</div>
);
}
export default Example

上面的代码的意思很简单: 定义一个 count = 0 的变量,和一个 setCount 的方法,来修改count 变量,简单的理解 useState就是 count,setCount 执行的一个规则。 最后我们导出着组件,你在需要的地方可以导入这个组件。 这个方法很简单,只是纯粹的做了一个计数器,没有复杂的逻辑,我们加一个逻辑,当count 变化的时候,与之有关联的组件也随变化

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

function Example() {
// 声明一个叫 "count" 的 state 变量
const [count, setCount] = useState(0);
const changeCountEffect = () => {
return <div>
count变化后,我是count的平方,我变成{count * count}
</div>
}
useEffect(() => {
document.title = `点击了${count}`
})
return (
<div>
<h3>Hook demo 展示</h3>
<p>You clicked {count} times</p>
<button onClick={() => setCount(count + 1)}>
Click me
</button>
{changeCountEffect()}
</div>
);
} export default Example

这种场景很多 ,一个变化总会带动别的地方变化,比如计算价格等,我们这里不做展开了。

4、实战演练

下面我们做一个简单的接口调用,将接口数据渲染出来。

const  ApplicationDataShow = () => {
const [data, setData] = useState([]);
useEffect(() => {
request('/get/alluser', {}, 'get').then((res)=>{
console.log(res);
if(res) {
setData(res.users)
}
})
}, [])
const addImg = () => {
let imgItem = {
avatar_url: "https://img.tukuppt.com//ad_preview/00/27/80/5f8c23f29eef4.jpg!/fw/780",
regsiterTime: "2020/12/26 下午10:07:04"
}
setData([...data, imgItem])
}
const subImg = () => {
let data1 = data.splice(1)
setData(data1)
}
return(
<div>
<h2>列表数据展示</h2>
<ul>
{data.map((item, index)=> {
return <li key={index}>
<p><img src={item.avatar_url} alt="" width="100" height="100"/></p>
<p>{item.regsiterTime}</p>
</li>
})}
</ul>
<button onClick={() => addImg()}>添加一张图片</button>
<p>
<button onClick={() => subImg()}>删除一张图片</button>
</p>
</div>
) }

  

里面http 请求 可忽略 我这边是在项目中封装了一个。

效果如下:

  上面的小demo,可以实际用到我们的代码中,请求接口,渲染页面,修改数据。页面上的添加和删除没有单独调用接口,这里只是从页面上添加数据和删除数据,效果其实都差不多,接口调用无非是在接口返回数据的时候,重新 setData 就好。

  我们明显可以看出,setData 只是一个 更改数据的方法,并没有逻辑处理。只需要把我们最终想要的数据传递给他,它去根据hook 内部的逻辑 去更新页面,双向数据绑定等。

  是不是很简单!相比 生命周期函数里,我们每次更改数据的时候,都要在适当的地方调用 setState 方法,重新赋值。

我是迩伶贰,如有错误敬请指出。

(转载请说明出处)

React Hook 入门使用的更多相关文章

  1. 使用React Hook后的一些体会

    一.前言 距离React Hook发布已经有一段时间了,笔者在之前也一直在等待机会来尝试一下Hook,这个尝试不是像文档中介绍的可以先在已有项目中的小组件和新组件上尝试,而是尝试用Hook的方式构建整 ...

  2. React Hook上车

    React Hook 是 v16.8 的新功能,自诞生以来,受到广泛的好评,在 React 版本更新中具有里程碑的意义.现在都2020年了,再不上车 React Hook 就真的 out 了... H ...

  3. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  4. 基于Nodejs生态圈的TypeScript+React开发入门教程

    基于Nodejs生态圈的TypeScript+React开发入门教程   概述 本教程旨在为基于Nodejs npm生态圈的前端程序开发提供入门讲解. Nodejs是什么 Nodejs是一个高性能Ja ...

  5. 2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等

    2015某编程网易语言vip课堂全套教程 包含post,hook入门到精通等  官方论坛弄来的  如果在官方下载需要权限的  挺不错教程 想学习易语言入门到精通 post hook  js改写的可以看 ...

  6. Hook入门

    Hook入门 2014-07-24 基本概念 Windows消息机制 Hook(钩子) 运行机制 核心函数 C# hook示例 基本概念[1] Windows消息机制[5] Windows操作系统是建 ...

  7. 【转载】React初学者入门须知

    http://www.oschina.net/news/75530/9-things-every-reactjs-beginner-should-know react.js入门学习 看了一遍,没什么特 ...

  8. 小白也能看懂的插件化DroidPlugin原理(二)-- 反射机制和Hook入门

    前言:在上一篇博文<小白也能看懂的插件化DroidPlugin原理(一)-- 动态代理>中详细介绍了 DroidPlugin 原理中涉及到的动态代理模式,看完上篇博文后你就会发现原来动态代 ...

  9. React Native入门教程 3 -- Flex布局

    上一篇文章中介绍了基本组件的使用 React Native入门教程(笔记) 2 – 基本组件使用及样式 本节内容将继续沿用facebook官方例子介绍如何使用Flexbox布局把界面设计的多样化. 转 ...

随机推荐

  1. MySQL全面瓦解13:系统函数相关

    概述 提到MySQL的系统函数,我们前面有使用过聚合函数,其实只是其中一小部分.MySQL提供很多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,并更加灵活地满足不同用 ...

  2. java编写规范及注意事项

    java编写规范及注意事项 1.注释 常见注释有三种  //   /**/ /****/ 如何才能写出漂亮的注释呢,注释的目的就是为了使你的代码让人更容易理解和维护,写一手好的注释是一个优秀码农的基本 ...

  3. Spring beanDefinition载入

    @Override public void refresh() throws BeansException, IllegalStateException { synchronized (this.st ...

  4. VS2019配置C+++mingW32配置

    两个安装教程博客 http://t.sg.cn/yq22mn http://t.sg.cn/wsavo0 基于调试报错,是因为文件夹是中文,贴一个详细的博客:http://t.sg.cn/3j5e4z

  5. Java 基础之 String 类

    String String 被声明为 final,因此不能被继承.(Integer 等包装类也不能被继承) 在 java8 中,String 内部使用 char 数组 来存储数据 public fin ...

  6. PyQt(Python+Qt)学习随笔:Qt Designer中主窗口对象的dockOptions属性

    dockOptions属性代表主窗口对浮动部件停靠的反应,其类型为枚举类型QMainWindow.DockOptions.相关取值及含义如下: 这些枚举值可以组合使用,仅控制如何在QMainWindo ...

  7. 如何使用 K8s 两大利器"审计"和"事件"帮你摆脱运维困境?

    概述 下面几个问题,相信广大 K8s 用户在日常集群运维中都曾经遇到过: 集群中的某个应用被删除了,谁干的? Apiserver 的负载突然变高,大量访问失败,集群中到底发生了什么? 集群节点 Not ...

  8. 【Docker】 CentOS7 安装 Docker 及其使用方法 ( 一 )

    系列目录: [Docker] CentOS7 安装 Docker 及其使用方法 ( 一 ) [Docker] 使用Docker 在阿里云 Centos7 部署 MySQL 和 Redis (二) [D ...

  9. 什么是VIP?什么是IP漂移?

    IP地址和MAC地址 在 TCP/IP 的架构下,所有想上网的电脑,不论是用何种方式连上网路,都必须要有一个唯一的 IP-address.事实上IP地址是主机硬件地址的一种抽象,简单的说,MAC地址是 ...

  10. 揭秘 VMAF 视频质量评测标准

    作者:杨洋,阿里云技术专家,从事直播相关媒体处理引擎开发 背景 图像质量的衡量是个老问题,对此人们提出过很多简单可行的解决方案.例如均方误差(Mean-squared-error,MSE).峰值信噪比 ...