This commit is contained in:
Nicolas Bayet
2025-09-26 18:08:15 +02:00
parent 8d12bf17dc
commit adb9d405bb
+14 -2
View File
@@ -1,5 +1,6 @@
import type { Env } from "./app"; import type { Env } from "./app";
import { getCurrent } from "./component_node"; import { getCurrent } from "./component_node";
import { popExecutionContext, pushExecutionContext } from "./executionContext";
import { onMounted, onPatched, onWillUnmount } from "./lifecycle_hooks"; import { onMounted, onPatched, onWillUnmount } from "./lifecycle_hooks";
import { inOwnerDocument } from "./utils"; import { inOwnerDocument } from "./utils";
@@ -86,11 +87,22 @@ export function useEffect<T extends unknown[]>(
effect: Effect<T>, effect: Effect<T>,
computeDependencies: () => [...T] = () => [NaN] as never computeDependencies: () => [...T] = () => [NaN] as never
) { ) {
const context = getCurrent().component.__owl__.executionContext;
let cleanup: (() => void) | void; let cleanup: (() => void) | void;
let dependencies: T; let dependencies: T;
const runEffect = () => {
pushExecutionContext(context);
try {
cleanup = effect(...dependencies);
} finally {
popExecutionContext();
}
};
onMounted(() => { onMounted(() => {
dependencies = computeDependencies(); dependencies = computeDependencies();
cleanup = effect(...dependencies); runEffect();
}); });
onPatched(() => { onPatched(() => {
@@ -101,7 +113,7 @@ export function useEffect<T extends unknown[]>(
if (cleanup) { if (cleanup) {
cleanup(); cleanup();
} }
cleanup = effect(...dependencies); runEffect();
} }
}); });