React Hooks介绍和环境搭建(一)
React Hooks 简介
2018年底FaceBook的React小组推出Hooks以来,所有的React的开发者都对它大为赞赏。React Hooks
就是用函数的形式代替原来的继承类的形式,并且使用预函数的形式管理state
,有Hooks可以不再使用类的形式定义组件了。这时候你的认知也要发生变化了,原来把组件分为有状态组件和无状态组件,有状态组件用类的形式声明,无状态组件用函数的形式声明。那现在所有的组件都可以用函数来声明了。
我们这里先不说Hooks有什么好处,就算说了,你也不可能完全理解,好像我王婆卖瓜自卖自夸一样,所以先学习,学过几节课后,我们再来总结React Hooks
的好处。
### 使用create-react-app
创建项目
create-react-app
在视频中已经使用过很多次了,它是React官方的脚手架,所以稳定性和使用率都是目前最好的,你可以大胆的进行使用。
这里我在D盘新建一个ReactHooksDemo
的文件夹,然后在文件夹中用create-react-app
创建一个demo01的项目。我们这些动作全部在命令提示符(我习惯叫终端)中进行。
1 2 3 4 | D: // 进入D盘 mkdir ReactHooksDemo cd ReactHooksDemo create-react-app demo01 |
这个过程要根据你的网络情况,我公司的时间大概30秒,家里大概15分钟,我也不知道为什么,只能说是网络差异吧。建立好以后,我会把项目进行最小化设置(删除/src
下的大部分代码和文件).
只留/src/index.js
文件,然后把里边的代码删减成下面的样子:
1 2 3 4 | import React from 'react' ; import ReactDOM from 'react-dom' ; ReactDOM.render(<App />, document.getElementById( 'root' )); |
这样就算开发环境搭建完成了,接下来我们对比一下原始的写法和现在有了React Hooks的写法。
React Hooks 编写形式对比
先来写一个最简单的有状体组件,点我们点击按钮时,点击数量不断增加。
原始写法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import React, { Component } from 'react' ; class Example extends Component { constructor(props) { super (props); this .state = { count:0 } } render() { return ( <div> <p>You clicked { this .state.count} times</p> <button onClick={ this .addCount.bind( this )}>Chlick me</button> </div> ); } addCount(){ this .setState({count: this .state.count+1}) } } export default Example; |
React Hooks 写法:
1 2 3 4 5 6 7 8 9 10 11 | import React, { useState } from 'react' ; function Example(){ 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; |
从这两个程序的对比上可以看出Hooks本质上就是一类特殊的函数,他们可以为你的函数型组件(function component)注入一些特殊的功能。这听起来有点像以前React中的Mixins
差不多哦。其实是由很多不同,hooks的目的就是让你不再写class
,让function
一统江湖。
转自:https://jspang.com/posts/2019/08/12/react-hooks.html
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
2018-10-24 react-redux 中 connect 的常用写法
2017-10-24 vue2 axios 接口函数封装