mutation-within-jsx.tsx — react Source File
Architecture documentation for mutation-within-jsx.tsx, a tsx file in the react codebase. 1 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 93a11b73_90b6_8ae8_9929_6eaf44f8eb38["mutation-within-jsx.tsx"] 006eec3d_77a9_4a47_e6c1_a96d7a6c9c05["shared-runtime"] 93a11b73_90b6_8ae8_9929_6eaf44f8eb38 --> 006eec3d_77a9_4a47_e6c1_a96d7a6c9c05 style 93a11b73_90b6_8ae8_9929_6eaf44f8eb38 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import {
Stringify,
makeObject_Primitives,
mutateAndReturn,
} from 'shared-runtime';
/**
* In this example, the `<Stringify ... />` JSX block mutates then captures obj.
* As JSX expressions freeze their values, we know that `obj` and `myDiv` cannot
* be mutated past this.
* This set of mutable range + scopes is an edge case because the JSX expression
* references values in two scopes.
* - (freeze) the result of `mutateAndReturn`
* this is a mutable value with a mutable range starting at `makeObject()`
* - (mutate) the lvalue storing the result of `<Stringify .../>`
* this is a immutable value and so gets assigned a different scope
*
* obj@0 = makeObj(); ⌝ scope@0
* if (cond) { |
* $1@0 = mutate(obj@0); |
* myDiv@1 = JSX $1@0 <- scope@1 |
* } ⌟
*
* Coincidentally, the range of `obj` is extended by alignScopesToBlocks to *past*
* the end of the JSX instruction. As we currently alias identifier mutableRanges to
* scope ranges, this `freeze` reference is perceived as occurring during the mutable
* range of `obj` (even though it is after the last mutating reference).
*
* This case is technically safe as `myDiv` correctly takes `obj` as a dependency. As
* a result, developers can never observe myDiv can aliasing a different value generation
* than `obj` (e.g. the invariant `myDiv.props.value === obj` always holds).
*/
function useFoo({data}) {
let obj = null;
let myDiv = null;
if (data.cond) {
obj = makeObject_Primitives();
if (data.cond1) {
myDiv = <Stringify value={mutateAndReturn(obj)} />;
}
}
return myDiv;
}
export const FIXTURE_ENTRYPOINT = {
fn: useFoo,
params: [{data: {cond: true, cond1: true}}],
sequentialRenders: [
{data: {cond: true, cond1: true}},
{data: {cond: true, cond1: true}},
],
};
Domain
Subdomains
Functions
Dependencies
- shared-runtime
Source
Frequently Asked Questions
What does mutation-within-jsx.tsx do?
mutation-within-jsx.tsx is a source file in the react codebase, written in tsx. It belongs to the TestingUtilities domain, Fixtures subdomain.
What functions are defined in mutation-within-jsx.tsx?
mutation-within-jsx.tsx defines 1 function(s): useFoo.
What does mutation-within-jsx.tsx depend on?
mutation-within-jsx.tsx imports 1 module(s): shared-runtime.
Where is mutation-within-jsx.tsx in the architecture?
mutation-within-jsx.tsx is located at compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler/mutation-within-jsx.tsx (domain: TestingUtilities, subdomain: Fixtures, directory: compiler/packages/babel-plugin-react-compiler/src/__tests__/fixtures/compiler).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free