How to use the preact.options._diff function in preact

To help you get started, we’ve selected a few preact examples, based on popular ways it is used in public projects.

Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.

github preactjs / preact / debug / src / debug.js View on Github external
export function initDebug() {
	/* eslint-disable no-console */
	let oldBeforeDiff = options._diff;
	let oldDiffed = options.diffed;
	let oldVnode = options.vnode;
	let oldCatchError = options._catchError;
	let oldRoot = options._root;
	let oldHook = options._hook;
	const warnedComponents = !isWeakMapSupported
		? null
		: {
				useEffect: new WeakMap(),
				useLayoutEffect: new WeakMap(),
				lazyPropTypes: new WeakMap()
		  };

	options._catchError = (error, vnode, oldVNode) => {
		let component = vnode && vnode._component;
		if (component && typeof error.then === 'function') {
github Tencent / omi / packages / preact-css / src / index.js View on Github external
import { options } from 'preact'
import { getStyleId, appendStyle } from './style'

let componentNode

// store a reference to the "current component" vnode
let oldDiff = options._diff || options.__b
options._diff = options.__b = vnode => {
  componentNode = vnode
  if (oldDiff) oldDiff(vnode)
}

// reset component reference at end of diffing:
let oldDiffed = options.diffed
options.diffed = vnode => {
  if (componentNode === vnode) componentNode = null
  if (oldDiffed) oldDiffed(vnode)
}

// our vnode hook looks up the associated component
let old = options.vnode
options.vnode = vnode => {
  const component = componentNode && (componentNode._component || componentNode.__c)
github Tencent / omi / packages / preact-css / src / index.js View on Github external
import { options } from 'preact'
import { getStyleId, appendStyle } from './style'

let componentNode

// store a reference to the "current component" vnode
let oldDiff = options._diff || options.__b
options._diff = options.__b = vnode => {
  componentNode = vnode
  if (oldDiff) oldDiff(vnode)
}

// reset component reference at end of diffing:
let oldDiffed = options.diffed
options.diffed = vnode => {
  if (componentNode === vnode) componentNode = null
  if (oldDiffed) oldDiffed(vnode)
}

// our vnode hook looks up the associated component
let old = options.vnode
options.vnode = vnode => {
  const component = componentNode && (componentNode._component || componentNode.__c)
  if (component) {
github preactjs / preact / debug / src / devtools / index.js View on Github external
let roots = hook.getFiberRoots(rid);
			root = helpers.handleCommitFiberRoot(root);
			if (!roots.has(root)) roots.add(root);
		});

		onCommitUnmount = catchErrors(vnode => {
			hook.onCommitFiberUnmount(rid, vnode);
		});
	})();

	// Store (possible) previous hooks so that we don't overwrite them
	let prevVNodeHook = options.vnode;
	let prevCommitRoot = options._commit;
	let prevBeforeUnmount = options.unmount;
	let prevBeforeDiff = options._diff;
	let prevAfterDiff = options.diffed;

	options.vnode = vnode => {
		// Tiny performance improvement by initializing fields as doubles
		// from the start. `performance.now()` will always return a double.
		// See https://github.com/facebook/react/issues/14365
		// and https://slidr.io/bmeurer/javascript-engine-fundamentals-the-good-the-bad-and-the-ugly
		vnode.startTime = NaN;
		vnode.endTime = NaN;

		vnode.startTime = 0;
		vnode.endTime = -1;
		if (prevVNodeHook) prevVNodeHook(vnode);
	};

	options._diff = vnode => {
github preactjs / preact / debug / src / devtools / index.js View on Github external
let prevAfterDiff = options.diffed;

	options.vnode = vnode => {
		// Tiny performance improvement by initializing fields as doubles
		// from the start. `performance.now()` will always return a double.
		// See https://github.com/facebook/react/issues/14365
		// and https://slidr.io/bmeurer/javascript-engine-fundamentals-the-good-the-bad-and-the-ugly
		vnode.startTime = NaN;
		vnode.endTime = NaN;

		vnode.startTime = 0;
		vnode.endTime = -1;
		if (prevVNodeHook) prevVNodeHook(vnode);
	};

	options._diff = vnode => {
		vnode.startTime = now();
		if (prevBeforeDiff != null) prevBeforeDiff(vnode);
	};

	options.diffed = vnode => {
		vnode.endTime = now();
		if (prevAfterDiff != null) prevAfterDiff(vnode);
	};

	options._commit = catchErrors((vnode, commitQueue) => {
		// Call previously defined hook
		if (prevCommitRoot != null) prevCommitRoot(vnode, commitQueue);

		// These cases are already handled by `unmount`
		if (vnode == null) return;
		onCommitRoot(vnode);
github preactjs / preact / debug / src / component-stack.js View on Github external
export function setupComponentStack() {
	let oldDiff = options._diff;
	let oldDiffed = options.diffed;
	let oldRoot = options._root;
	let oldVNode = options.vnode;
	let oldRender = options._render;

	options.diffed = vnode => {
		if (isPossibleOwner(vnode)) {
			ownerStack.pop();
		}
		renderStack.pop();
		if (oldDiffed) oldDiffed(vnode);
	};

	options._diff = vnode => {
		if (isPossibleOwner(vnode)) {
			renderStack.push(vnode);
github preactjs / preact / debug / src / component-stack.js View on Github external
export function setupComponentStack() {
	let oldDiff = options._diff;
	let oldDiffed = options.diffed;
	let oldRoot = options._root;
	let oldVNode = options.vnode;
	let oldRender = options._render;

	options.diffed = vnode => {
		if (isPossibleOwner(vnode)) {
			ownerStack.pop();
		}
		renderStack.pop();
		if (oldDiffed) oldDiffed(vnode);
	};

	options._diff = vnode => {
		if (isPossibleOwner(vnode)) {
			renderStack.push(vnode);
		}
		if (oldDiff) oldDiff(vnode);
	};

	options._root = (vnode, parent) => {
		ownerStack = [];
		if (oldRoot) oldRoot(vnode, parent);
	};

	options.vnode = vnode => {
		vnode._owner =
			ownerStack.length > 0 ? ownerStack[ownerStack.length - 1] : null;
		if (oldVNode) oldVNode(vnode);
	};
github preactjs / preact / demo / profiler.js View on Github external
componentDidMount() {
		options._diff = vnode => (vnode.startTime = performance.now());
		options.diffed = vnode => (vnode.endTime = performance.now());
	}
github preactjs / preact / demo / profiler.js View on Github external
componentWillUnmount() {
		delete options._diff;
		delete options.diffed;
	}
github preactjs / preact / debug / src / debug.js View on Github external
isValid = true;
				break;
			default:
				isValid = false;
		}
		if (!isValid) {
			let componentName = getDisplayName(vnode);
			throw new Error(
				`Expected a valid HTML node as a second argument to render.	Received ${parentNode} instead: render(<${componentName} />, ${parentNode});`
			);
		}

		if (oldRoot) oldRoot(vnode, parentNode);
	};

	options._diff = vnode => {
		let { type, _parent: parent } = vnode;
		let parentVNode = getClosestDomNodeParent(parent);

		if (type === undefined) {
			throw new Error(
				'Undefined component passed to createElement()\n\n' +
					'You likely forgot to export your component or might have mixed up default and named imports' +
					serializeVNode(vnode)
			);
		} else if (type != null && typeof type === 'object') {
			if (type._lastDomChild !== undefined && type._dom !== undefined) {
				throw new Error(
					`Invalid type passed to createElement(): ${type}\n\n` +
						'Did you accidentally pass a JSX literal as JSX twice?\n\n' +
						`  let My${getDisplayName(vnode)} = ${serializeVNode(type)};\n` +
						`  let vnode = ;\n\n` +