官方检测 React-hook 的 ESLint 有 bug ?

点击上方 前端加加,关注公众号

回复加群,加入前端加加技术交流群

起因:

团队在项目中定位一个很奇怪的问题,错误信息不明确,定位了很久才发现是 react rule 规则的问题。

image.png

百思不得其解,项目已经引入 eslint-plugin-react-hooks 了,这种应该在 eslint 阶段就告警了。实在不应该提交上来。

定位问题

首先,找到问题代码

const PreviewItemInner = observer((props: IProps & RouteComponentProps<Imatch>) => { 
    if(!x) {return null }
    
    // 触发了 react rule 的代码 
    const [y, setY] = useState(false);

});

猜测:是否用 observer 包裹的函数无法触发 react-hook-eslint 对应的规则?那我们先找到 eslint-plugin-react-hooks 这个源码. 我们来看看源码解析是怎么样的。

image.png
image.png

从源码中可以看到,只有是普通函数,箭头函数,还有 memo ,forwardRef 包裹的函数,才会触发这个逻辑校验… 使用 observer 包裹的函数,是无法触发这个规则的。

解决问题

想着给官方提一个bug,不知道要等到猴年马月。而且感觉官方是“有意”限制使用 memo,forwardRef 包裹的函数才触发这个逻辑。所以自己重新写了一个包 eslint-plugin-react-hooks-mobx ,支持 observe 包裹的函数检测 react-hook 规则。

使用如下:

tnpm install eslint-plugin-react-hooks-mobx --save-dev

.eslintrc.js 配置如下:

module.exports = {
  plugins: ['react-hooks-mobx'],
  rules: {
    'react-hooks-mobx/rules-of-hooks': 'error',
    'react-hooks-mobx/exhaustive-deps': 'warn',
  },
};

配置完,完美,使用 observer 包裹的函数也可以正常检测了。mr 时要关注的点又少了一点,????

image.png

Eslint 插件开发小 TIP

  • 插件开发文档 https://cn.eslint.org/docs/developer-guide/working-with-rules

  • ESLint官方为了方便开发者开发插件,提供了使用Yeoman (generator-eslint),创建规则,目录都可以直接调用命令

  • ESLint 使用 JS 解析器 espree 将 JS 代码解析成 AST , 平时写规则的时候,可以到  https://astexplorer.net/ 分析代码规则。

写在最后

日常在团队中需要频繁注意,容易引起 bug 的代码,可以通过自己编写 eslint 插件来彻底避免~

写在最后

这可能是大型复杂项目下数据流的最佳实践

你要知道的 Npm Script 都在这里

图解 React-router 带你深入理解路由本质

NPM 组件你应该知道的事

如何搭建一个完美的组件库?

npx, 你了解吗?

一文快速入门 Graphql

8个问题带你进阶 React

从0实现一个脚手架

一个栗子带你上手CSS3动画

你不知道的 useRef

面试官:你怎么优雅写 CSS?

Typescript 最佳实践

关 注 「 前 端 加 加 」 ,   第 一 时 间 获 取 优 质 文 章 .  

添加 peen 好友,拉你进交流划水聊天群,有看到好文章/代码都会发在群里。

如果觉得这篇文章还不错,来个【转发、收藏、在看】三连吧,让更多的人也看到~

❤️ 顺手点个在看呗 ↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值