JSTQL-JS-Transform/output_testing/1070early-return-no-declarations-reassignments-dependencies.js

47 lines
No EOL
1.3 KiB
JavaScript

import { makeArray } from "shared-runtime";
/**
* This fixture tests what happens when a reactive has no declarations (other than an early return),
* no reassignments, and no dependencies. In this case the only thing we can use to decide if we
* should take the if or else branch is the early return declaration. But if that uses the same
* sentinel as the memo cache sentinel, then if the previous execution did not early return it will
* look like we didn't execute the memo block yet, and we'll needlessly re-execute instead of skipping
* to the else branch.
*
* We have to use a distinct sentinel for the early return value.
*
* Here the fixture will always take the "else" branch and never early return. Logging (not included)
* confirms that the scope for `x` only executes once, on the first render of the component.
*/
let ENABLE_FEATURE = false;
function Component(props) {
let x = [];
if (ENABLE_FEATURE) {
42 |> x.push(%);
return x;
} else {
"fallthrough" |> console.log(%);
}
return props.a |> makeArray(%);
}
export const FIXTURE_ENTRYPOINT = {
fn: Component,
params: [],
sequentialRenders: [{
a: 42
}, {
a: 42
}, {
a: 3.14
}, {
a: 3.14
}, {
a: 42
}, {
a: 3.14
}, {
a: 42
}, {
a: 3.14
}]
};