mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
The previous PR only updated simple assignment expressions (where the lvalue is an identifier), this PR extends the same idea to all assignment variants. Note that there is one case that doesn't work yet, which is complex destructuring assignment as a value: ```javascript let x = makeObject(); x.foo(([[x]] = makeObject())); ``` What happens here is that we lower the destructuring to a series of steps: ``` tmp1: Destructure Const [ tmp0 ] = makeObject(); tmp2: Destructure Reassign [ x ] = tmp0; PropertyCall x, 'foo', [ tmp1 ] ``` Thankfully we can detect this case: if we have a const/let declaration with an lvalue, that's invalid. See the new error test case which shows we correctly detect & reject this case for now.
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