dillon1000/react
Commit
Browse files useContext returns frozen values
This was an oversight in the original definition of useContext (oops my bad). Context values are owned by React and should not be modified. I found this because some cases of existing useMemo were not preserved (tested via the validatePreserveExistingManualMemo flag) due to function calls referencing context being assumed to mutate. This change will allow more memoization, it's also just more correct for the rules of React. Note the new ValueReason variant so that we can provide a precise error message about mutating context values.
Changed paths10 files
First-parent comparisoncompiler/packages/babel-plugin-react-forget/src/HIR/Globals.ts ModifiedM compiler/packages/babel-plugin-react-forget/src/HIR/HIR.ts ModifiedM compiler/packages/babel-plugin-react-forget/src/HIR/ObjectShape.ts ModifiedM compiler/packages/babel-plugin-react-forget/src/Inference/InferReferenceEffects.ts ModifiedR compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/todo.useContext-mutate-context-in-callback.expect.md →compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.invalid-mutate-context-in-callback.expect.md RenamedR compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/todo.useContext-mutate-context-in-callback.js →compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.invalid-mutate-context-in-callback.js RenamedA compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.invalid-mutate-context.expect.md AddedA compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/error.invalid-mutate-context.js AddedM compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/react-namespace.expect.md ModifiedM compiler/packages/babel-plugin-react-forget/src/__tests__/fixtures/compiler/react-namespace.js ModifiedPatch
Files changed
Rendering syntax-highlighted changes…