进入hook的学习——useState
hook
React Hook是React 16.8版本之后添加的新属性,用最简单的话来说,React Hook就是一些React提供的内置函数,这些函数可以让函数组件和类组件一样能够拥有组件状态(state)以及进行副作用(side effect)。
hook是React未来的走向,React的路由在6版本后已经舍弃了类组件的方法。我们在类组件中想使用路由只有用6版本之前。这些hook就有点像类组件中的生命周期钩子,官方来帮我们调用,因此在函数组件内我们能够实现类组件的生命周期的功能。但是它们在本质上还是有区别。
useState
useState和类组件的this.state一样,都是用来管理组件状态的。
在React Hook没出来之前,函数组件也叫做Functional Stateless Component(FSC:功能无状态的组件),这是因为函数组件每次执行的时候都会生成新的函数作用域所以同一个组件的不同渲染(render)之间是不能够共用状态的。
useState,它允许函数组件将自己的状态持久化到React运行时的某个地方,这样在组件每次重新渲染的时候都可以从这个地方拿到该状态,而且当该状态被更新的时候,组件也会重渲染。
用法:
let arr=useState("hello world")
//useState("hello world")的返回值为一个数组,其中有两项
//第一项就是我们我传入的参数,它变成了一个有状态的数据
//第二项是一个函数,传入的值可以修改第一项的数据,而且会调用render刷新页面。就好比setState()
console.log(arr[0]) //hello world
arr[1]("修改数据") //一旦这条语句运行,arr[0]的值就变为 修改数据
我们通过数组取下标的方式很不方面,因此我们在开发时一般用解构的方式直接引用,如:
let [msg,setMsg]=useState("hello world")
即,在使用时,我们直接在模板中<div>{msg}</div>
修改时,setMsg("***")
useState()的返回值来修改当前数据与类组件中this.setState()的区别
类组件是将当前设置的state浅归并到旧state的操作。而hook的setState函数则是将新state直接替换旧的state。因此我们在编写函数组件的时候,就要合理划分state,避免将没有关系的状态放在一起管理.
例如:
函数组件中:(全量替换)
let [obj,setObj]=useState({a:1,b:2})
setObj({c:3})
//这时obj的值就变为了{c:3},{a:1,b:2}直接被替换掉了
类组件中:
state={a:1,b:2}
this.setState({c:3})
这时state就变为了{a:1,b:2,c:3},它的思想就是有则替换,无则添加进去
对于修改数据后获取新值
在类组件中的this.setState()方法,第一个参数是传入要修改的值,其实他还有第二个形参,我们可以传入一个回调函数。传入的回调函数形参中可以接收到新值。
this.setState(newstate,(state)=>{“使用新值“})
在函数组件中,useState() 未提供获取更新后数据的回调函数。但是有另外一个hook可以解决:副作用函数useEffect
在Vue中,想使用更改后的新值,Vue框架为我们提供了一个nextTick函数。它的作用是在下次DOM
更新循环结束之后执行延迟回调,在修改数据之后使用$nextTick
,则可以在回调中获取到最新的值。
进入hook的学习——useState相关推荐
- Android中免root的hook框架学习——whale(二)实战hook java方法
文末附项目完整代码下载地址 一.在android studio中创建一个新的项目 Hook Java, 把whale项目里的java文件夹的代码复制到自己的项目中. 复制 built/Android ...
- Android so导入表,Android so注入(inject)和Hook技术学习(二)——Got表hook之导入表hook...
全局符号表(GOT表)hook实际是通过解析SO文件,将待hook函数在got表的地址替换为自己函数的入口地址,这样目标进程每次调用待hook函数时,实际上是执行了我们自己的函数. GOT表其实包含了 ...
- register_backward_hook(hook)、register_forward_hook(hook)、register_forward_pre_hook(hook)方法学习笔记
参考链接: register_backward_hook(hook) 参考链接: register_forward_hook(hook) 参考链接: register_forward_pre_hook ...
- Android中免root的hook框架学习——whale(一)下载和基本介绍
本文是whale的基本介绍,下一篇将介绍实战demo 项目地址:https://github.com/asLody/whale 以下内容来自whale项目README的介绍 一.概述 Whale是一个 ...
- React学习笔记(八)--- HooK
一.简介 在之前的学习中,我们了解到只有类组件中才能使用 state,函数组件是无法使用的.但Hook的出现,改变这种情况,Hook是React 16.8 版本的新增特性,可以让我们在函数组件中使 ...
- 测试开发【Mock平台】06开发:项目管理功能(二)Atnd页面搭建经验实战与学习线路梳理
[Mock平台]为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React 框架完成搭建一个测试工具平台,希望作为一个实战项目能为你的测试开发学习有帮助. 经过一段 ...
- react16.8-17 全家桶学习 QA
适用人群:刚开始学习 react 框架的同学,当作参考查阅. 说明:多以自己分析整理为主,如有错误理解请指正,谢谢! 笔记来源 开始 – React (Q1-2,有点傻的问题已经删掉了) 尚硅谷Rea ...
- 手把手讲解 Android Hook入门Demo
前言 手把手讲解系列文章,是我写给各位看官,也是写给我自己的. 文章可能过分详细,但是这是为了帮助到尽量多的人,毕竟工作5,6年,不能老吸血,也到了回馈开源的时候. 这个系列的文章: 1.用通俗易懂的 ...
- ref使用之react / react hook
在react典型的数据流中,props传递是父子组件交互的一种方式:通过传递一个新的props值来使子组件重新render,从而达到父子组件通信.某些情况下(例如和第三方的dom库整合,或者某个dom ...
最新文章
- h264中profile和level的含义
- java邮件支持_使用Spring的JAVA Mail支持简化邮件发送功能
- HTTP协议的挑战者:RSocket
- linux共享库的运行方式,Linux下动态共享库加载及使用详解
- py06-python基础-字典
- MathSystem
- ceph rbd resize之后文件系统的调节
- 利用VBS合并Excel中相同单元格
- 二阶振荡环节的谐振频率_晶振频率稳定性的两个重要因素
- C# 语言历史版本特性(C# 1.0到C# 8.0汇总)
- 统计 GitHub 评分、收录有意思的 README,GitHub 热点速览
- 《程序设计导引及在线实践》学习
- linux su文件删除了,UBUNTU linux 批量删除文件
- 佛系程序员之歌 - 和我一起减减压
- 免费无广告的统计工具TalKingData
- 自然语言处理工具之 HanLP 鸟瞰
- 微信小程序 获取地理位置使用
- c语言中定义一个十六进制的数,C语言如何定义一个16进制数
- 计算机画画小游戏,小学生电脑绘画教学
- C++ websocket 使用体验