[feature] eslint-config-ali: 升级 eslint-plugin-react-hooks 以支持 React 19 的 useEffectEvent
- Dominant language
- TypeScript
- Stars
- 1.1k
- Forks
- 217
- PR merge metrics
- No merged PRs in 30d
Description
## 背景
`useEffectEvent` 是 React 19(19.2 起稳定)提供的 Hook,用于在 Effect 中引用"最新值"而不需要把该函数加入依赖数组。eslint 侧的 `exhaustive-deps` 需要在较新版本才能正确识别它(把 Event Function 排除在依赖之外)。
## 问题
`packages/eslint-config-ali` 当前依赖 `eslint-plugin-react-hooks@^5.2.0`(package.json),v5/v6.0 的 `exhaustive-deps` 尚不认识 `useEffectEvent`,会对以下合法代码误报:
```jsx
import React, { useEffect, useEffectEvent } from 'react';
function Chat({ roomId }) {
const onMessage = useEffectEvent((msg) => console.log(msg, roomId));
useEffect(() => {
onMessage('hi'); // React 19 语义下 onMessage 不应出现在依赖数组
}, []);
return
}
```
实际报错:
```
warning React Hook useEffect has a missing dependency: 'onMessage'.
Either include it or remove the dependency array react-hooks/exhaustive-deps
```
另外注意 `^5.2.0` 的 caret 范围无法覆盖到 6.x,即使全新安装也拿不到已修复的版本。
## 建议
- 将 `eslint-plugin-react-hooks` 升级到 `^6.1.0`(或更新),规则名 `react-hooks/rules-of-hooks`、`react-hooks/exhaustive-deps` 不变;
- 补充一条针对 `useEffectEvent` 的用例到 `tests/`,防止回归。
相关文件:
- `packages/eslint-config-ali/package.json`(依赖声明)
- `packages/eslint-config-ali/src/configs/react.ts`(rules-of-hooks / exhaustive-deps 开关)
Contributor guide
Research direction
Update the eslint-plugin-react-hooks dependency in packages/eslint-config-ali/package.json and review the related rules in packages/eslint-config-ali/src/configs/react.ts. Add a useEffectEvent case under tests/ and run the relevant test suite. Done means the dependency accepts the React 19 hook and exhaustive-deps no longer reports a false missing-dependency warning.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- eslint, react, typescript
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 85/100