前面是类组件,今天是函数式组件

函数式组件的特点

  • 没有状态

  • 没有生命周期

  • 没有this

  1. useState

src>index.js

import React from 'react'
import { createRoot } from 'react-dom/client'
import './css/common.css'  //引入公共样式
import App1 from './App1' //引入模块const root = createRoot(document.getElementById('root'))
root.render(<div><App1/></div>
)

src>css>common.css 公共样式文件

*{padding:0;margin:0;list-style:none;
}

src>App1.js

import React, { useState } from 'react'
function App1() {//useState(0)中的0是num的初始值,后面修改num的值需要通过setNumconst [num, setNum] = useState(0)return (<div><h3>num: {num}</h3></div>)
}

*注意,Hooks的API只能在函数内的最外层声明

if(true){const [num, setNum] = useState(0)
}
//报错,不能写在条件判断语句中
  1. useEffect

将App1改为

import React, { useState, useEffect } from 'react'
function App1() {// useState(0) 中的0是num的初始值const [num, setNum] = useState(0)const [num1, setNum1] = useState(0)// 检测视图更新useEffect(() => {console.log('useEffect,视图更新了');},[num])//1  相当于componentDidMount:// 第一次挂载一定会打印一次//2  相当于componentDidUpdate:// 回调的数组不写,默认所有数据更新都会打印// 回调的数组写了对应的变量,则变量改变才打印// 回调的数组为空,则·不检测更新return (<div>App1<h3>num: {num}</h3><button onClick={() => setNum(num + 1)}>累加</button><h3>num1: {num1}</h3><button onClick={() => setNum1(num1 + 1)}>累加</button></div>)
}
export default App1
  1. useReducer 和useRef

类似于redux

src>App2.js:

import React, { useRef, useReducer } from 'react'
import './css/app2.css'
// 1、定义一个reducer
function texReducer(state, action) {let newState = JSON.parse(JSON.stringify(state))switch (action.type) {case 'change_fn':newState.texVal = action.valuereturn newStatecase 'publish_fn':if (action.value) {newState.list.unshift(action.value)newState.texVal  = '' //数据初始化} else {alert('请输入非空的内容')}return newStatecase 'del_fn':newState.list.splice(action.value, 1)return newStatedefault:break}
}function App2() {// 2、使用reducer并解构出state与dispatch,   { texVal: '写点什么', list: [] }表示state的默认数据const [state, dispatch] = useReducer(texReducer, { texVal: '写点什么', list: [] })// 3.useRef获取元素const element = useRef(null)const changeFn = () => {// 4.current指向ref挂载的dom元素console.log(element.current.value);// 5.dispatch调用 dispatch({ type: 'change_fn', value: element.current.value })}const publishFn =() => { dispatch({ type: 'publish_fn', value: state.texVal }) }return (<div className="box"><div className='txtbox'><div className='title'>有什么新鲜事想告诉大家?</div><textarea name="" id="txta" ref={element} cols="30" rows="10" placeholder='请在此输入内容' value={state.texVal}onChange={changeFn}></textarea><div className='foot'><div></div><div className='btn' onClick={publishFn}>发布</div></div></div><ul className="content">{state.list.map((item, index) => {return <li key={index} className='foot'><div className='li-con'>{item}</div> <div className='btn' onClick={() => { dispatch({ type: 'del_fn', value: index }) }}>删除</div></li>})}</ul></div>)}
export default App2

记得在index.js引入组件App2

src>css>app2.css 样式文件

html {background-color: #eee;
}.title {color: #333;height: 50px;line-height: 50px;
}.box {width: 100%;height: 100%;}.txtbox {background-color: #fff;width: 800px;padding: 10px;margin: 100px auto 10px;
}#txta {width: 800px;height: 100px;box-sizing: border-box;border: 1px solid #ccc;outline-color: #ff8140;padding: 8px;}.content {width: 800px;padding: 10px;margin: 0 auto;background-color: #fff;
}.foot {display: flex;justify-content: space-between;height: 40px;}.btn {width: 10%;text-align: center;height: 28px;line-height: 28px;margin: 6px 0;background-color: #ff8140;border-radius: 4px;color: #fff;}ul li {height: 50px;line-height: 50px;border-bottom: 1px solid #999;
}.li-con {overflow: hidden;text-overflow: ellipsis;white-space: nowrap;width: 90%;}

React之 常见的hooks相关推荐

  1. react以及常见前端面试题(看这一篇就够了)持续更新中...

    目录 1.说说对React的理解?有哪些特性? 2.说说Real diff算法是怎么运作的? 3. 说说React生命周期有哪些不同的阶段?每个阶段对应的方法是? 4.说说你对React中虚拟dom的 ...

  2. [react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景?

    [react] 请描述下你对react的新特性Hooks的理解?它有哪些应用场景? 在 React 中使用 class 继承 React.Component,就可以在类里面使用各种各样的钩子函数,比如 ...

  3. react dispatch_React系列自定义Hooks很简单

    React系列-Mixin.HOC.Render Props(上) React系列-轻松学会Hooks(中) React系列-自定义Hooks很简单(下) 我们在第二篇文章中介绍了一些常用的hooks ...

  4. 使用react实现select_使用 Hooks 优化 React 组件

    奇技指南 本文内容主要是我之前分享的文字版,若想看重点的话可以看之前的Slide: https://ppt.baomitu.com/d/75fc979a 本文作者奇舞团前端开发工程师李喆明. 需求描述 ...

  5. 拯救react的hooks:react的问题和hooks的作用

    react组件和react组件逻辑复用 react是一个视图层组件方案,最核心的功能就是绑定视图与数据和逻辑,实现响应式的渲染.react的组件最核心的就是渲染出的Vdom,也就是jsx的部分. 渲染 ...

  6. 浅谈:为什么vue和react都选择了Hooks?

    一.hooks: 什么叫大势所趋? 2019年年初,react 在 16.8.x 版本正式具备了 hooks 能力. 2019年6月,尤雨溪在 vue/github-issues 里提出了关于 vue ...

  7. React 生命周期、Hooks

    React React 生命周期 Hooks Hook 的特点 Effect Hook 自定义 hooks React 生命周期 react 生命周期是组件实例从创建运行到销毁的一系列过程 compo ...

  8. [译] How to NOT React:React 中常见的反模式与陷阱

    原文地址:How to NOT React: Common Anti-Patterns and Gotchas in React 原文作者:NeONBRAND 译文出自:掘金翻译计划 本文永久链接:g ...

  9. React 父组件(hooks)调用子组件(calss)方法

    父组件(hooks) let richTextRef = {};<RichText getRichText={getRichText} content={content} onRef={ref ...

最新文章

  1. new char[x]和new char(x)的差别
  2. Docker 安装JDK1.8
  3. 你只管打开清华小姐姐总结的Python学习知识手册 ,剩下的交给「卧槽」
  4. bzoj3456: 城市规划
  5. javascript调试常用工具讲解
  6. 整理一篇Linux drm显示系统的文章
  7. 参数化登陆防止SQL注入攻击
  8. 三菱M80操作介绍_共享屋:三菱M70 PLC 转M80操作步骤
  9. nedc和epa续航里程什么意思_了解 NEDC 之后 我发现电动车的续航还是得实测
  10. 老李分享:HTTP协议之协议头
  11. Cache计算的再总结
  12. Java 集合处理/ 空值处理/ 异常处理,使用心得分享!
  13. 使用JMH做Java微基准测试(一)测试入门
  14. PS打开PSD文档服务器未响应,ps打不开psd文件的解决方法
  15. 菜鸟也疯狂,易语言自绘控件__进度条、滑块条
  16. mysql 前几个月的时间_MYsql 查询 查询当前周、月份及前几个月的数据(时间 查询)...
  17. 底层文件I/O和ANSI标准I/O的区别
  18. HDR视频色调映射算法(之二:Adaptive temporal TMO)
  19. ROSCon2018国际会议讲座录像和讲稿PPT
  20. Python案例分析之客户信贷预测模型

热门文章

  1. sql文件导入阿里云RDS数据库操作
  2. win10 怎么禁用win键盘
  3. 使用POI,实现excel文件导出,图片url导出文件,图片和excel文件导出压缩包
  4. 注意: C++ 不支持默认 int 问题总结
  5. sEMG的时频域特征
  6. illustrate插件--AI插件--印前插件--CADTools--导出表分析--界面检测(二)
  7. 可靠的UDP (RUDP)
  8. 简约水墨风文化教育PPT模板
  9. 数仓lambda架构
  10. java提供对多线程同步语言级的支持_赞同科技笔试题11