React Hooks方法

1.useState
import React, { useState } from "react";
/*
目标:
掌握useState的使用
作用:实现响应式数据的
用法:引入,useState构造响应式数据
const [val,修改val的函数]=useState(val的初始值)
注意点:
1.hook都必须是以use开头的
2.必须在函数的最顶层使用
*/
export default function App() {
const [user, setUser] = React.useState({ name: "Jack", age: 18 });
const onClick = () => {
//setUser不可以局部更新,如果只改变其中一个,那么整个数据都会被覆盖
// setUser({
// name: 'Frank'
// })
setUser({
...user, //拷贝之前的所有属性
name: "Frank", //这里的name覆盖之前的name
});
};
return (
<div className="App">
<h1>{user.name}</h1>
<h2>{user.age}</h2>
<button onClick={onClick}>Click</button>
</div>
);
}
注意事项:
地址要进行改变
setState(obj) 如果obj地址不变,那么React就认为数据没有变化,不会更新视图
2.useEffect
// 副作用hook用来处理一些React之外的事件
//但是其实EffectHook最常见的使用场景是模拟生命周期
// 用法:当useEffect依赖的数据发生变化,就会调用回调函数
// useEffect(回调函数,[依赖的数据])
import React, { useEffect, useState } from "react"; export default function EffectHook() {
const [val, setVal] = useState(0);
// 当前这个用法,模拟了componentDidUpdated这个生命周期
// useEffect(() => {
// console.log(1);
// }, [val]);
// setInterval(() => {
// setVal(val + 1);
// }, 1000); // 使用useEffect模拟componentDidMount
// useEffect(() => {
// //该回调函数会在第一次渲染的时候调用一次
// console.log(3);
// }, []); useEffect(() => {
// 在回调函数里面返回一个函数
return () => {
console.log("卸载");
};
}, []);
return <div></div>;
}
3.useContext
import React, { useState, createContext, useContext } from "react";
/*
目标:
学会使用useContext 使用context进行多级组件传递数据
用法:
1.createContext
2.Provider
3.useContext
const data=useContext(MyContext)
data为 Provider给的value的值
MyContext为在第一步创建的context的变量
*/
// 1.创建一个context
const MyContext = createContext();
export default function ContextStudy() {
const [count, setCount] = useState(5);
const add = () => {
setCount(count + 1);
};
// 2.需要一个Provider
return (
<MyContext.Provider value={{ count, add }}>
<Parent></Parent>
</MyContext.Provider>
);
}
function Parent() {
return <Child></Child>;
}
function Child() {
const data = useContext(MyContext);
console.log(data);
return (
<div>
<h3>孙子</h3>
<p>{data.count}</p>
<button onClick={data.add}>++</button>
</div>
)
}
4.useReducer
import React, { useReducer, useState } from "react";
/*
目标:
掌握 ReducerHook
作用: 解决 useState 在处理数据比较复杂的时候的使用问题
[数据,处理数据的委托] = useReducer(处理函数,数据初始值)
*/
function useCount() {
const [count, setCount] = useState(0);
// const add1 = () => {
// setCount(count + 1);
// };
// const add2 = () => {
// setCount(count - 1);
// };
// const add3 = () => {
// setCount(count + 5);
// };
// function add({ type, pyload }) {
// if (type == "add1") {
// setCount(count + 1);
// } else if (type === "add2") {
// setCount(count - 1);
// }
// }
// return [count, add];
}
const reducer = (state, action) => {
console.log(action);
//判断action的type进行处理
switch (action.type) {
case "add1":
state++;
break;
case "add2":
state--;
break;
case "add3":
state += action.pyload;
break;
}
return state;
};
export default function ReducerHook() {
const [count, dispatch] = useReducer(reducer, 0);
return (
<div>
<div>ReducerHook</div>
<p>{count}</p>
<button onClick={() => dispatch({ type: "add1", pyload: 10 })}>++</button>
<button onClick={() => dispatch({ type: "add2" })}>++</button>
<button onClick={() => dispatch({ type: "add3", pyload: 5 })}>++</button>
</div>
);
}
5.useRef
import React, { useEffect, useRef } from "react";
export default function RefHook() {
const btn = useRef();
const sp = useRef();
// console.log(btn);
// 在componentDidMount后获取
useEffect(() => {
console.log(btn.current);
console.log(sp.current);
}, []);
return (
<div>
<button ref={btn}>Button</button>
<span ref={sp}>你好</span>
</div>
);
}
6.自定义Hook
import React, { useState } from "react";
/*
目标:
自定义Hook
把自己处理数据的过程变成一个hook
要求:
hook都要以use开头
好处:
1.代码简洁,方便书写和维护
2.逻辑会更加独立
*/
function useCount() {
const [count, setCount] = useState(0);
const onClick = () => {
setCount(count + 1);
};
return [count, onClick];
}
export default function CusHook() {
const [a, b] = useCount();
return (
<div>
<h1>CusHook</h1>
<p>{a}</p>
<button onClick={b}>++</button>
</div>
);
}
React Hooks方法的更多相关文章
- React Hooks中父组件中调用子组件方法
React Hooks中父组件中调用子组件方法 使用到的hooks-- useImperativeHandle,useRef /* child子组件 */ // https://reactjs.org ...
- 通过 React Hooks 声明式地使用 setInterval
本文由云+社区发表 作者:Dan Abramov 接触 React Hooks 一定时间的你,也许会碰到一个神奇的问题: setInterval 用起来没你想的简单. Ryan Florence 在他 ...
- 初探React Hooks & SSR改造
Hooks React v16.8 发布了 Hooks,其主要是解决跨组件.组件复用的状态管理问题. 在 class 中组件的状态封装在对象中,然后通过单向数据流来组织组件间的状态交互.这种模式下,跨 ...
- React Hooks新特性学习随笔
React Hooks 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. 前言 本篇主要以讲几个常用的api为主. 1.u ...
- 关于React Hooks,你不得不知的事
React Hooks是React 16.8发布以来最吸引人的特性之一.在开始介绍React Hooks之前,让咱们先来理解一下什么是hooks.wikipedia是这样给hook下定义的: In c ...
- react hooks 全面转换攻略(三) 全局存储解决方案
针对 react hooks 的新版本解决方案 一.redux维持原方案 若想要无缝使用原来的 redux,和其配套的中间件 promise,thunk,saga 等等的话 可以使用 redux-re ...
- react新特性 react hooks
本文介绍的是react新特性react hooks,本文面向的是有一定react开发经验的小伙伴,如果你对react还不是很熟悉的话我建议你先学习react并多多联系. 首先我们都知道react有3种 ...
- 30分钟精通React今年最劲爆的新特性——React Hooks
你还在为该使用无状态组件(Function)还是有状态组件(Class)而烦恼吗? --拥有了hooks,你再也不需要写Class了,你的所有组件都将是Function. 你还在为搞不清使用哪个生命周 ...
- React Hooks 深入系列 —— 设计模式
本文是 React Hooks 深入系列的后续.此篇详细介绍了 Hooks 相对 class 的优势所在, 并介绍了相关 api 的设计思想, 同时对 Hooks 如何对齐 class 的生命周期钩子 ...
- React Hooks 你不来了解下?
前言 最近在看 React 的新语法-- React Hooks,只能一句话概括:React 语法真的是越来越强大,越写代码越少. 强烈推荐还没看 React Hooks 的同学去学习下,这会让你写r ...
随机推荐
- 西电oj245 成绩统计 结构体数组使用
#include<stdio.h> struct student{ //定义一个结构体数组 int num; char name[11]; float g1; float g2; floa ...
- 记录Nginx配置
1 # Proxy to the Airsonic server location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_hea ...
- Python第3章 流程控制语句(第2次作业)
实例01 判断输入的是不是黄蓉所说的数 ①使用内置的print()函数输出"今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问几何?",代码如下: ②使用input()函 ...
- eclipse console 控制台输出乱码解决办法
一.console输出日志显示乱码 二.在类编辑处点击右键 Run As --> Run Configurations 三.在Common中设置字符集 gbk 四.restart 搜索 复制
- 与NewBing一起写作:《Web应用安全入门》
前言 本文内容基于我的<Web应用安全入门>公开课视频. Prompt:下面是一篇课程音频转录后的文本,请把它转成老师和学生对话形式的文本,要求遵循原文结构,语言衔接流畅,保持 Markd ...
- SpringBoot笔记--Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.报错的解决
问题描述 写了SpringBoot代码之后,运行不出来结果,报出这样的一个错误:Failed to configure a DataSource: 'url' attribute is not spe ...
- 分布式CAP_BASE博客参考
https://blog.csdn.net/lixinkuan328/article/details/95535691 CAP 一致性(Consistency) 可用性(Availability) 分 ...
- MySQL学习(十)索引
1.索引的种类 聚簇索引,非聚簇索引 主键索引,唯一索引,普通索引(前缀索引),全文索引 单值索引,复合索引 二级索引 覆盖索引 1.1 聚簇索引,非聚簇索引 参考文档: https://www.cn ...
- 微软出品自动化神器【Playwright+Java】系列(十二)测试框架的设计与开发
一.前言 大家好,我是六哥! 又有好长一段时间没更文了,不是我懒,而是确实在更文上,没有以前积极了,这里是该自我检讨的. 其实不是我不积极,而是相对更文学习来说,优先级不是最高. 对我而言,目前最重要 ...
- [C++STL教程]7.priority_queue优先队列入门学习!零基础都能听懂的教程
不知不觉C++STL教程系列已经第7期了.之前我们介绍过:vector, queue, stack, set, map等等数据结构. 今天我们来学习一个新的stl容器:priority_queue优先 ...