React Hooks 组件逻辑复用
先回顾 class 组件,再看 Hooks 组件
class 组件逻辑复用
存在的问题
- Mixins 早已废弃
- 变量作用域来源不清
- 属性重名
- Mixins 引入过多会导致顺序冲突
- 高级组件 HOC
- 组件层级嵌套过多,不易渲染,不易调试
- HOC 会劫持 props,必须严格规范,容易出现疏漏
- React Prop
- 学习成本高,不易理解
- 只能传递纯函数,而默认情况下纯函数功能有限
Hooks组件逻辑复用
有哪些好处
- 完全符合 Hooks 原有规则,没有其他要求,易理解记忆
- 变量作用域很明确
- 不会产生组件嵌套
例子
js
import { useState, useEffect } from 'react';
function useMousePosition() {
const [x, setX] = useState(0);
const [y, setY] = useState(0);
useEffect(() => {
function mouseMoveHandler(e) {
setX(e.clientX);
setY(e.clientY);
}
// 绑定事件
document.body.addEventListener('mousemove', mouseMoveHandler);
// 解绑事情
return () =>
document.body.removeEventListener('mousemove', mouseMoveHandler);
}, []);
return [x, y];
}
export default useMousePosition;
测试代码
js
import React, { useState } from 'react';
import useMousePosition from '../customHooks/useMousePosition';
function CustomHooksDemo() {
const [x, y] = useMousePosition();
return (
<div>
<p>
鼠标位置:{x},{y}
</p>
</div>
);
}
export default CustomHooksDemo;