react hooks的优缺点

优点

更容易复用代码
这点应该是react hooks最大的优点,它解决了类组件有些时候难以复用逻辑的问题。通过自定义hooks,便可以轻松复用逻辑。

清爽的代码风格
函数式编程风格,函数式组件、状态保存在运行环境、每个功能都包裹在函数中,整体风格更清爽,更优雅

代码量更少
向props或状态取值更加方便,函数组件的取值都从父级作用域直接取,而类组件需要先访问实例引用this,再访问其属性state和props,多了一步
更改状态也变得更加简单, this.setState({ count:xxx })变成 setCount(xxx)。
更容易发现无用的状态和函数
对比类组件,函数组件里面的unused状态和函数更容易被发现

更容易拆分组件
写函数组件的时候,你会更愿意去拆分组件,因为函数组件写起小组件比类组件要省事。

缺点

状态不同步
不好用的useEffect,

这绝对可以成为摒弃react hooks的理由。函数的运行是独立的,每个函数都有一份父级作用域。当我们处理复杂逻辑的时候,经常会碰到状态不同步的问题

副作用代码从主动式变成响应式
写函数组件时,你不得不改变一些写法习惯。你必须把深入理解useEffect和useCallback这些api的第二个参数的作用。其次,还有下面几点:

useEffect的依赖参数并不好写,你需要花时间去判断该把什么变量加入到依赖数组,幸运的是eslint-plugin-react-hooks很多场景可以帮你解决这点,但有时得靠你自己加以判断
useEffect很容易出错,它是响应式的,当某个依赖项变化时它才会被调用。你必须去理解它的调用时机、调用时的状态老旧问题,这不直观,也难以维护。有时,useEffect会发生比你预期更多的调用次数
怎么避免react hooks的常见问题
不要在useEffect里面写太多的依赖项,划分这些依赖项成多个useEffect,这样更好维护

如果你碰到状态不同步的问题,可以考虑下手动传递参数到函数。如:

// showCount的count来自父级作用域
const [count,setCount] = useState(xxx);
function showCount(){
    console.log(count)
}

// showCount的count来自参数
const [count,setCount] = useState(xxx);
function showCount(c){
    console.log(c)
}

一定要加入eslint-plugin-react-hooks这个插件,并且重视它的警告

感想
我觉得react hooks不会代替class Component。在复杂业务中,我觉得我会更喜欢用class Component而不是hooks,因为这种情况的class component更容易维护,特别是可拓展性更高

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值