Home / Function/ validateNoDerivedComputationsInEffects() — react Function Reference

validateNoDerivedComputationsInEffects() — react Function Reference

Architecture documentation for the validateNoDerivedComputationsInEffects() function in ValidateNoDerivedComputationsInEffects.ts from the react codebase.

Entity Profile

Dependency Diagram

graph TD
  1d91b2b6_6806_f495_0567_ab13bf567e33["validateNoDerivedComputationsInEffects()"]
  a3af5b5e_3d98_91f8_296b_f84c4c65a51c["ValidateNoDerivedComputationsInEffects.ts"]
  1d91b2b6_6806_f495_0567_ab13bf567e33 -->|defined in| a3af5b5e_3d98_91f8_296b_f84c4c65a51c
  c3bc3875_256f_8f5e_7800_2f9c5bae65eb["runWithEnvironment()"]
  c3bc3875_256f_8f5e_7800_2f9c5bae65eb -->|calls| 1d91b2b6_6806_f495_0567_ab13bf567e33
  041ca752_10c1_3cda_1f5c_02f44a01310e["invariant()"]
  1d91b2b6_6806_f495_0567_ab13bf567e33 -->|calls| 041ca752_10c1_3cda_1f5c_02f44a01310e
  a72f7c73_27c5_90bc_40c7_fca057f06dfa["validateEffect()"]
  1d91b2b6_6806_f495_0567_ab13bf567e33 -->|calls| a72f7c73_27c5_90bc_40c7_fca057f06dfa
  6d8385f7_ca89_0968_e79e_ed2e1aa846c9["hasAnyErrors()"]
  1d91b2b6_6806_f495_0567_ab13bf567e33 -->|calls| 6d8385f7_ca89_0968_e79e_ed2e1aa846c9
  style 1d91b2b6_6806_f495_0567_ab13bf567e33 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoDerivedComputationsInEffects.ts lines 47–103

export function validateNoDerivedComputationsInEffects(fn: HIRFunction): void {
  const candidateDependencies: Map<IdentifierId, ArrayExpression> = new Map();
  const functions: Map<IdentifierId, FunctionExpression> = new Map();
  const locals: Map<IdentifierId, IdentifierId> = new Map();

  const errors = new CompilerError();

  for (const block of fn.body.blocks.values()) {
    for (const instr of block.instructions) {
      const {lvalue, value} = instr;
      if (value.kind === 'LoadLocal') {
        locals.set(lvalue.identifier.id, value.place.identifier.id);
      } else if (value.kind === 'ArrayExpression') {
        candidateDependencies.set(lvalue.identifier.id, value);
      } else if (value.kind === 'FunctionExpression') {
        functions.set(lvalue.identifier.id, value);
      } else if (
        value.kind === 'CallExpression' ||
        value.kind === 'MethodCall'
      ) {
        const callee =
          value.kind === 'CallExpression' ? value.callee : value.property;
        if (
          isUseEffectHookType(callee.identifier) &&
          value.args.length === 2 &&
          value.args[0].kind === 'Identifier' &&
          value.args[1].kind === 'Identifier'
        ) {
          const effectFunction = functions.get(value.args[0].identifier.id);
          const deps = candidateDependencies.get(value.args[1].identifier.id);
          if (
            effectFunction != null &&
            deps != null &&
            deps.elements.length !== 0 &&
            deps.elements.every(element => element.kind === 'Identifier')
          ) {
            const dependencies: Array<IdentifierId> = deps.elements.map(dep => {
              CompilerError.invariant(dep.kind === 'Identifier', {
                reason: `Dependency is checked as a place above`,
                loc: value.loc,
              });
              return locals.get(dep.identifier.id) ?? dep.identifier.id;
            });
            validateEffect(
              effectFunction.loweredFunc.func,
              dependencies,
              errors,
            );
          }
        }
      }
    }
  }
  if (errors.hasAnyErrors()) {
    throw errors;
  }
}

Domain

Subdomains

Frequently Asked Questions

What does validateNoDerivedComputationsInEffects() do?
validateNoDerivedComputationsInEffects() is a function in the react codebase, defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoDerivedComputationsInEffects.ts.
Where is validateNoDerivedComputationsInEffects() defined?
validateNoDerivedComputationsInEffects() is defined in compiler/packages/babel-plugin-react-compiler/src/Validation/ValidateNoDerivedComputationsInEffects.ts at line 47.
What does validateNoDerivedComputationsInEffects() call?
validateNoDerivedComputationsInEffects() calls 3 function(s): hasAnyErrors, invariant, validateEffect.
What calls validateNoDerivedComputationsInEffects()?
validateNoDerivedComputationsInEffects() is called by 1 function(s): runWithEnvironment.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free