mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
I realized we hadn't updated InferReferenceEffects to match our latest thinking on hooks. Specifically, we will default to assuming that hooks can mutate their arguments and return mutable values — this works with our model since we don't treat hooks specially for reactive scope construction. Ie, first we figure out what variables construct together, then we create scopes, then we prune scopes that contain hooks. So changing the reference effects for hooks "just works". Note that it is helpful for our unit tests to have an example hook that we know _does_ freeze its input and return a frozen value, so i've temporarily added `useFreeze()` to the list of defined hooks. That is meant as a stopgap: the right solution is to allow some way to tell the compiler about specific custom hooks and their semantics.
test262
@ 83a46bfe0e
React Forget
React Forget is an experimental Babel plugin to automatically memoize React Hooks and Components.
Development
# tsc --watch
$ yarn dev
# in another terminal window
$ yarn test --watch
Notes
An overview of the implementation can be found in the Architecture Overview.
This transform
- needs plugin-syntax-jsx as a dependency to inherit the syntax from.
- should be run before plugin-transform-react-jsx
- assume the enforcement of rules of hooks, i.e.
- only call hooks from React functions
- only call hooks at the top level
- https://www.npmjs.com/package/eslint-plugin-react-hooks
Scaffolding
- https://github.com/facebook/flow/tree/master/packages/babel-plugin-transform-flow-enums
- https://github.com/babel/babel/blob/main/packages/babel-plugin-transform-react-jsx/src/create-plugin.ts
Reference