(React+TypeScript实战篇)二.ReactHook

概念:hook是react16.8新增特性。它可以让你在不编写class的情况下使用state以及其他的React特性。

 

一.useState

说明:useState---组件状态管理钩子

    useState使函数组件能够使用state

1.基本使用规则

const [state, setState] = useState(initState);

    ·state是要设置的状态

    ·setState是更新state的方法

    ·initState是初始的state,可以是随意的数据类型,也可以是回调函数,但是函数必须是有返回值。

2.案例

(React+TypeScript实战篇)二.ReactHook_第1张图片

 

二.useEffect

说明:

    useEffect是副作用处理的钩子,数据获取、订阅、定时执行、手动修改ReactDOM这些行为

    useEffect也是componentDidMount、componentDidUpdate和componentWillUnmount这几个生命周期方法的统一

1.基本使用

useEffect(callback, array)

    参数callback:

    回调函数,作用是处理副作用逻辑,callback可以返回一个函数,用作清理

    参数array【可选】:

    数组,用于控制useEffect的执行。

        空数组,只会执行一次(即初次渲染render),相当于componentDidMount

        非空数组,useEffect会在数组发生改变后执行

        不填array这个数组,useEffect组件每次渲染都会执行

1)不填array数组案例

(React+TypeScript实战篇)二.ReactHook_第2张图片

2)案例(监控点击事件,获取坐标,同时每次设置之后需要移除)

(React+TypeScript实战篇)二.ReactHook_第3张图片

3)案例:控制useEffect的执行,修改前面两个例子的代码

a.设置成挂载和卸载的时候执行useEffect第二个参数设置成空数组

useEffect(()=>{...}, []);

(React+TypeScript实战篇)二.ReactHook_第4张图片

在app.tsx中设置组件的卸载挂载

(React+TypeScript实战篇)二.ReactHook_第5张图片

b.传递非空数组情况

用之前的这个案例进行设置

(React+TypeScript实战篇)二.ReactHook_第6张图片

设置之后的,只监测age值发生变化才会触发:

(React+TypeScript实战篇)二.ReactHook_第7张图片

多个值监测:

(React+TypeScript实战篇)二.ReactHook_第8张图片

 

三.自定义Hook(useMousePosition)

说明:该自定义的hook是参考获取定位组件案例的【PS:监控事件改成鼠标滑动了。】

定义useMousePosition.tsx

(React+TypeScript实战篇)二.ReactHook_第9张图片

调用:在app.tsx中引入

import useMousePosition from './components/useMousePosition';

(React+TypeScript实战篇)二.ReactHook_第10张图片

效果展示:

(React+TypeScript实战篇)二.ReactHook_第11张图片

 

四.自定义hook(useURLLoader)

说明:该自定义hook是结合axios完成load加载效果,即发起请求获取数据时显示加载中状态。

定义useURLLoader.tsx

(React+TypeScript实战篇)二.ReactHook_第12张图片

在app.tsx

导入

import useURLLoader from './hooks/useURLLoader';

(React+TypeScript实战篇)二.ReactHook_第13张图片

(React+TypeScript实战篇)二.ReactHook_第14张图片

效果展示:

(React+TypeScript实战篇)二.ReactHook_第15张图片

 

五、useRef

说明:useRef方便我们访问操作dom

1.导入useRef

2.设置domRef

3.绑定input表单

(React+TypeScript实战篇)二.ReactHook_第16张图片

4.利用useEffect监控组件变化触发,获取焦距同时获取表单中的值

(React+TypeScript实战篇)二.ReactHook_第17张图片

5.效果展示

(React+TypeScript实战篇)二.ReactHook_第18张图片【点击组件,触发聚焦及打印表单值】

 

六、useContext

说明:

1)context就是用来更方便的实现全局数据共享的,但是由于他并不是那么好用,所以我们一般会使用第三方状态管理器来实现全局数据共享

    ·redux、dva、mobx

2)useContext(context)是针对context上下文提出的一个hooksAPI,它接受React.createContext()的返回值作为参数,即context对象,并返回最近的context

3)使用useContext是不需要再使用Provider和Consumer的

4)当最近的context更新时,那么使用该context的hook将会重新渲染

案例体验:

1)在app.tsx中定义全局的参数

(React+TypeScript实战篇)二.ReactHook_第19张图片

2)在app.tsx.中定义全局的声明,可供后面使用

(React+TypeScript实战篇)二.ReactHook_第20张图片

3)在组件中使用

a.引入

b.获取参数

(React+TypeScript实战篇)二.ReactHook_第21张图片

c.效果展示

d.变量使用

(React+TypeScript实战篇)二.ReactHook_第22张图片

e.绑定样式

(React+TypeScript实战篇)二.ReactHook_第23张图片

f.按钮样式

(React+TypeScript实战篇)二.ReactHook_第24张图片

g.换种样式

(React+TypeScript实战篇)二.ReactHook_第25张图片

(React+TypeScript实战篇)二.ReactHook_第26张图片

h.按钮效果展示

 

七、hook规则

1.只在最顶层使用Hook

2.只在React函数中调用Hook

 

 

 

 

你可能感兴趣的:(react,typescript)