Home / Function/ if_block() — svelte Function Reference

if_block() — svelte Function Reference

Architecture documentation for the if_block() function in if.js from the svelte codebase.

Entity Profile

Dependency Diagram

graph TD
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9["if_block()"]
  35d60eb3_a123_b735_48e0_4fce90c205ae["if.js"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|defined in| 35d60eb3_a123_b735_48e0_4fce90c205ae
  b31601aa_35ce_7827_5394_99fb97fa27d2["hydrate_next()"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|calls| b31601aa_35ce_7827_5394_99fb97fa27d2
  965d3fe6_c7da_0708_eb2c_13a616bc4bca["read_hydration_instruction()"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|calls| 965d3fe6_c7da_0708_eb2c_13a616bc4bca
  8bcc1a1c_73ab_4fe7_59be_b28bbe88fd3e["skip_nodes()"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|calls| 8bcc1a1c_73ab_4fe7_59be_b28bbe88fd3e
  40f27ad3_30bb_8f2a_3fb3_757088cf7428["set_hydrate_node()"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|calls| 40f27ad3_30bb_8f2a_3fb3_757088cf7428
  f5b61c69_d41c_bdb7_b931_5b8b3374332c["set_hydrating()"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|calls| f5b61c69_d41c_bdb7_b931_5b8b3374332c
  8783b6d3_ff2d_7032_cf54_f6a71da85e37["ensure()"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|calls| 8783b6d3_ff2d_7032_cf54_f6a71da85e37
  1bd7dd6f_4c22_6f44_9747_fc5ea0deaa7b["block()"]
  1c26aae4_d98a_69f4_58e6_458a25a8ffb9 -->|calls| 1bd7dd6f_4c22_6f44_9747_fc5ea0deaa7b
  style 1c26aae4_d98a_69f4_58e6_458a25a8ffb9 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/svelte/src/internal/client/dom/blocks/if.js lines 21–82

export function if_block(node, fn, elseif = false) {
	if (hydrating) {
		hydrate_next();
	}

	var branches = new BranchManager(node);
	var flags = elseif ? EFFECT_TRANSPARENT : 0;

	/**
	 * @param {number | false} key
	 * @param {null | ((anchor: Node) => void)} fn
	 */
	function update_branch(key, fn) {
		if (hydrating) {
			const data = read_hydration_instruction(node);

			/**
			 * @type {number | false}
			 * "[" = branch 0, "[1" = branch 1, "[2" = branch 2, ..., "[!" = else (false)
			 */
			var hydrated_key;

			if (data === HYDRATION_START) {
				hydrated_key = 0;
			} else if (data === HYDRATION_START_ELSE) {
				hydrated_key = false;
			} else {
				hydrated_key = parseInt(data.substring(1)); // "[1", "[2", etc.
			}

			if (key !== hydrated_key) {
				// Hydration mismatch: remove everything inside the anchor and start fresh.
				// This could happen with `{#if browser}...{/if}`, for example
				var anchor = skip_nodes();

				set_hydrate_node(anchor);
				branches.anchor = anchor;

				set_hydrating(false);
				branches.ensure(key, fn);
				set_hydrating(true);

				return;
			}
		}

		branches.ensure(key, fn);
	}

	block(() => {
		var has_branch = false;

		fn((fn, key = 0) => {
			has_branch = true;
			update_branch(key, fn);
		});

		if (!has_branch) {
			update_branch(false, null);
		}
	}, flags);
}

Domain

Subdomains

Frequently Asked Questions

What does if_block() do?
if_block() is a function in the svelte codebase, defined in packages/svelte/src/internal/client/dom/blocks/if.js.
Where is if_block() defined?
if_block() is defined in packages/svelte/src/internal/client/dom/blocks/if.js at line 21.
What does if_block() call?
if_block() calls 7 function(s): block, ensure, hydrate_next, read_hydration_instruction, set_hydrate_node, set_hydrating, skip_nodes.

Analyze Your Own Codebase

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

Try Supermodel Free