react 使用hooks
λ yarn add react@16.7.0-alpha.2
λ yarn add react-dom@16.7.0-alpha.2
设置 state
import React, { useState } from "react";
const l = console.log;
function Test() {
const [n, setN] = useState(0);
const [info, setInfo] = useState({
name: "ajanuw",
});
function handleAddN() {
setN(n + 1);
}
function handleInputChange(e) {
setInfo({
...info,
name: e.target.value,
});
}
return (
<div>
<p>test</p>
<p>{n}</p>
<button onClick={handleAddN}>click me</button>
<hr />
<input type="text" value={info.name} onChange={handleInputChange} />
</div>
);
}
useEffect 钩子
它像是 componentDidMount, componentDidUpdate, and componentWillUnmount 这3个钩子
他将在第一次渲染运行,状态改变时运行,返回一个函数来做到 componentWillUnmount 里面做的一些事情
可以执行多个
第2个参数可以监听指定的数据更新才执行
import React, { useState, useEffect } from "react";
const l = console.log;
function Test() {
const [age, setAge] = useState(0);
const [info, setInfo] = useState({
name: "ajanuw",
});
useEffect(
() => {
document.title = `hello ${info.name}`;
let timer = setTimeout(() => {
document.title = `react app`;
}, 2000);
return () => {
l("卸载");
clearTimeout(timer);
};
},
[info],
);
useEffect(
() => {
l("只有age状态更新,才能执行");
},
[age],
);
function handleInputChange(e) {
setInfo({
...info,
name: e.target.value,
});
}
return (
<div>
<input type="text" value={info.name} onChange={handleInputChange} />
</div>
);
}
编写自己的 hooks
就类似编写 高阶组件和渲染组件差不多
function Test() {
const [age, setAge] = useState(0);
const ajanuw = useInput("ajanuw");
const suou = useInput("suou");
useEffect(
() => {
l("只有age状态更新,才能执行");
},
[age],
);
return (
<div>
<input type="text" {...ajanuw} />
<br />
<input type="text" {...suou} />
</div>
);
}
function useInput(iv) {
const [info, setInfo] = useState({
name: iv,
});
useEffect(
() => {
document.title = `hello ${info.name}`;
let timer = setTimeout(() => {
document.title = `react app`;
}, 2000);
return () => {
clearTimeout(timer);
};
},
[info],
);
function handleInputChange(e) {
setInfo({
...info,
name: e.target.value,
});
}
return {
value: info.name,
onChange: handleInputChange,
};
}
useContext
获取 Context 上下文
rx
const l = console.log;
function Test(props) {
const btnRef = useRef();
useEffect(() => {
const click$ = fromEvent(btnRef.current, "click");
click$
.pipe(
map(v => v.type),
throttleTime(2000),
)
.subscribe(l);
return () => {
click$.unsubscribe();
};
});
return (
<>
<button ref={btnRef}>click me</button>
</>
);
}
加载异步数据 更具体的文章
useEffect 传入空数组可以避免在组件更新时激活它,但仅用于组件的安装
import React, { useState, useEffect } from "react";
import axios from "axios";
import Mock from "mockjs";
Mock.mock("/mock/a", "post", opt => {
const body = JSON.parse(opt.body);
return Mock.mock({
code: body.p >= 3 ? 1 : 0,
"data|2": [
{
"id|+1": 1,
label: "@word",
},
],
// data: [],
});
}).setup({
timeout: 1200,
});
const l = console.log;
function Test(props) {
const { status, list, getMore, loading, error } = useDataApi(
0,
[],
"/mock/a",
);
return (
<>
{loading && <div>加载中</div>}
{!!list.length && (
<ul>
<li>
<button onClick={getMore}>加载更多</button>
</li>
{list.map((el, i) => (
<li key={i}>{el.label}</li>
))}
</ul>
)}
{error && <div>暂无数据</div>}
</>
);
}
function useDataApi(initStatus, initData, url) {
const [status, setStatus] = useState(initStatus); // 0 ok, 1 notData, 2 loading
const [p, setP] = useState(1);
const [list, setList] = useState(initData);
useEffect(
() => {
getList();
},
[p],
);
async function getList() {
setStatus(2);
let { code, data } = await axios.post(url, { p });
if (code === 1) {
setStatus(1);
} else {
setList(pdata => [...pdata, ...data]);
setStatus(0);
}
}
function getMore() {
setP(pp => pp + 1);
}
return { status, list, getMore, loading: status === 2, error: status === 1 };
}
export default Test;
react 使用hooks的更多相关文章
- 使用 react 的 hooks 进行全局的状态管理
使用 react 的 hooks 进行全局的状态管理 React 最新正式版已经支持了 Hooks API,先快速过一下新的 API 和大概的用法. // useState,简单粗暴,setState ...
- how to create react custom hooks with arguments
how to create react custom hooks with arguments React Hooks & Custom Hooks // reusable custom ho ...
- React Hooks & react forwardRef hooks & useReducer
React Hooks & react forwardref hooks & useReducer react how to call child component method i ...
- React 与 Hooks 如何使用 TypeScript 书写类型?
React 与 Hooks 如何使用 TypeScript 书写类型? 本文写于 2020 年 9 月 20 日 函数组件与 TS 对于 Hooks 来说是不支持使用 class 组件的. 如何在函数 ...
- react 16 Hooks渲染流程
useState react对useState进行了封装,调用了mountState. function useState<S>( initialState: (() => S) | ...
- 【react】---Hooks的基本使用---【巷子】
一.react-hooks概念 React中一切皆为组件,React中组件分为类组件和函数组件,在React中如果需要记录一个组件的状态的时候,那么这个组件必须是类组件.那么能否让函数组件拥有类组件的 ...
- 【授课录屏】JavaScript高级(IIFE、js中的作用域、闭包、回调函数和递归等)、MySQL入门(单表查询和多表联查)、React(hooks、json-server等) 【可以收藏】
一.JavaScript授课视频(适合有JS基础的) 1.IIFE 2.js中的作用域 3.闭包 4.表达式形式函数 5.回调函数和递归 资源地址:链接:https://pan.baidu.com/s ...
- React Hooks (React v16.7.0-alpha)
:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdow ...
- 理解 React Hooks 心智模型:必须按顺序、不能在条件语句中调用的规则
前言 自从 React 推出 hooks 的 API 后,相信大家对新 API 都很喜欢,但是它对你如何使用它会有一些奇怪的限制.比如,React 官网介绍了 Hooks 的这样一个限制: 不要在循环 ...
随机推荐
- Visual Studio 2015编译Lua 5.3.4遇到的坑
被坑的不浅,遇到错误:" LNK1561:必须定义入口点",解决方案删除再建,步骤一遍一遍操作,还是报错.如下图所示: 首先,它必须要改成DLL或者LIB(动态/静态库),如果是应 ...
- 利用Caffe训练模型(solver、deploy、train_val) + python如何使用已训练模型
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/5 ...
- python接口自动化测试(四)-Cookie&Sessinon
掌握了前面几节的的内容,就可以做一些简单的http协议接口的请求发送了,但是这些还不够.HTTP协议是一个无状态的应用层协议,也就是说前后两次请求是没有任何关系的,那如果我们测试的接口之前有相互依赖关 ...
- python 执行sql得到字典格式数据
本文在提供一种方式,实现执行sql语句 返回字典结果集 # 连接数据库,数据库的,这里使用的setting中的默认设置,在这里不做具体的介绍,不懂的可以百度一下 conn = MySQLdb.conn ...
- python3 --- locale命名空间让程序更加安全了
[简介] 由于python-2.x 并没有locale这个层次的命名空间,所以临时变量有可能会泄漏,进而影响到了包涵它的命名空间 [看一下pyhont-2.x是怎么泄漏临时变量的] python Py ...
- LVS简介与使用
一.LVS是什么? LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我们国家的章文嵩博士的一个开源项目.在linux内存2.6中,它已经成为内核的一部分,在此之 ...
- 再谈Promise
方法 构造函数 接受的参数是一个带两个Function参数的函数,实际的异步代码编写在这个函数里,成功后调用第一个参数,失败调用第二个: Promise.prototype.catch 当构造函数里调 ...
- .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
/// <summary> /// 项目文件夹下路径 返回流类型数据,如:图片类型 /// </summary> /// <returns></returns ...
- ELK & ElasticSearch 5.1 基础概念及配置文件详解【转】
转自:https://blog.csdn.net/zxf_668899/article/details/54582849 配置文件 基本概念 接近实时NRT 集群cluster 索引index 文档d ...
- [转]decorator(HTML装饰器)
原文地址:https://blog.csdn.net/jzh440/article/details/7770013 1>:每当遇到一个新的技术,首先我会问自己,这个技术是做神马的?用这个技术有神 ...