mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
Completes a todo for the `if` condition of scopes without any inputs. In this case since there are no inputs we can check for changes, we check if the first _output_ cache slot is set to the sentinel. For this to work we need to ensure that all scopes have at least one output, which isn't currently the case. Dead code can produce output-less sentinels. So this PR also adds a pass to find scopes w/o any outputs and convert them to regular blocks. We could in theory also just delete them, but for now let's be more conservative. This is something we'd want to highlight as a diagnostic in an IDE, though existing dead code linters would almost certainly find this case too.
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