The `useIgnoredEffect` hook is useful in firing an effect only when a _subset_ of dependencies change, despite subscribing to many dependencies. But the previous implementation of `useIgnoredEffect` had a few problems: - The effect did not receive the updated values of `ignoredDeps` - thus, `useIgnoredEffect` pretty much worked the same way as using `useEffect` and omitting said dependencies from the dependency array. This caused the `ignoredDeps` values to be stale. - It compared objects by value instead of reference, which is slower and behaves differently than `useEffect` itself. - Edge cases where the effect does not run even though the dependencies have changed. E.g. if an `ignoredDep` has value `null` and a `dep` changes its value from _something_ to `null`, the effect incorrectly does **not** run, as the current logic detects that said value is part of `ignoredDeps` => no `dep` actually changed. This PR replaces the `useIgnoredEffect` hook with a new pattern which to combine `useEffect` with a new `useEffectEvent` hook as described here: https://react.dev/learn/separating-events-from-effects#extracting-non-reactive-logic-out-of-effects. While this is not available in React 19 stable, there is a polyfill available that's already used in several big projects (e.g. react-spectrum and bluesky).
47 lines
1.3 KiB
JSON
47 lines
1.3 KiB
JSON
{
|
|
"name": "@payloadcms/eslint-config",
|
|
"version": "3.9.0",
|
|
"description": "Payload styles for ESLint and Prettier",
|
|
"keywords": [],
|
|
"homepage": "https://payloadcms.com",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/payloadcms/payload.git",
|
|
"directory": "packages/eslint-config"
|
|
},
|
|
"license": "MIT",
|
|
"author": "Payload <dev@payloadcms.com> (https://payloadcms.com)",
|
|
"maintainers": [
|
|
{
|
|
"name": "Payload",
|
|
"email": "info@payloadcms.com",
|
|
"url": "https://payloadcms.com"
|
|
}
|
|
],
|
|
"type": "module",
|
|
"main": "index.mjs",
|
|
"scripts": {
|
|
"test": "echo \"Error: no test specified\" && exit 1"
|
|
},
|
|
"dependencies": {
|
|
"@eslint-react/eslint-plugin": "1.16.1",
|
|
"@eslint/js": "9.14.0",
|
|
"@payloadcms/eslint-plugin": "workspace:*",
|
|
"@types/eslint": "9.6.1",
|
|
"@types/eslint__js": "8.42.3",
|
|
"@typescript-eslint/parser": "8.14.0",
|
|
"eslint": "9.14.0",
|
|
"eslint-config-prettier": "9.1.0",
|
|
"eslint-plugin-import-x": "4.4.2",
|
|
"eslint-plugin-jest": "28.9.0",
|
|
"eslint-plugin-jest-dom": "5.4.0",
|
|
"eslint-plugin-jsx-a11y": "6.10.2",
|
|
"eslint-plugin-perfectionist": "3.9.1",
|
|
"eslint-plugin-react-hooks": "0.0.0-experimental-a4b2d0d5-20250203",
|
|
"eslint-plugin-regexp": "2.6.0",
|
|
"globals": "15.12.0",
|
|
"typescript": "5.7.3",
|
|
"typescript-eslint": "8.14.0"
|
|
}
|
|
}
|