alibaba / alibaba/f2e-spec

[feature] eslint-config-ali: 升级 eslint-plugin-react-hooks 以支持 React 19 的 useEffectEvent

Open Beginner friendly
#151 0 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.