Skip to content

Utility Context Functions ​

This page introduces utility context functions in the Prelude plugin, which is automatically installed when you create an app.

_.portal ​

Render content at the end of the root element.

This is useful when you want to render a dialog or a tooltip that should not be affected by the parent element.

Example

ts
$app([Basics], _ => {
  _.div(() => {
    _.span("Inside the div");
    _.portal(_ => _.span("Inside the portal"));
  });
  _.span("Outside the div");
});

Result

html
<div id="root">
  <div>
    <span>Inside the div</span>
  </div>
  <span>Outside the div</span>
  <span>Inside the portal</span>
</div>

_.await ​

Use data from an async call when rendering.

TIP

Use try/catch to handle errors.

Example

ts
if (_.await(() => fetch("https://example.com"))) {
  // When the promise is fulfilled, _.await returns true.

  _.p(_.$awaited.statusText);

  // You can also use a custom id for a nesting await call.
  _.await(() => _.$awaited.text(), "Text") && _.p(_.$awaitedText);
} else {
  // When the promise is pending, _.await returns false.

  _.p("Loading...");
}

Result

_.documentTitle ​

Set the document title.

Example

ts
import { model } from "refina";
const username = model("");
$app([Basics], _ => {
  _.label("Username");
  _.textInput(username, false, "edit me");
  _.documentTitle(`Hello ${username}`);
});

_.embed ​

Embed content into the current rendering process.

_.asyncEmbed ​

Embed content that is asynchronously loaded.

Example

ts
_.asyncEmbed(() => import("./someContent.ts"));

which loads the content from ./someContent.ts asynchronously, which is useful for code splitting.

INFO

The content loaded by _.asyncEmbed is cached, so it will not be loaded twice.

_.provide ​

Provide a value or an object of values to _.$runtimeData for the duration of children.

Example

ts
_.provide({ username: "John" }, myView, ...viewParams);

which is equivalent to

ts
_.provide("username", "John", myView, ...viewParams);

_.now ​

Get the current time in milliseconds.

TIP

You need to specify the precisionMs parameter, which means for how many milliseconds the time will be updated.

If not specified, it is 1000, which means the time will be updated every second.

Example

ts
$app([Basics], _ => {
  _.p(`The current time is ${_.now(500)}`);
});

Result

_.setInterval ​

Schedule a callback to be called every interval milliseconds.

INFO

The interval will be automatically cleared when it is no longer rendered.

_.for ​

See List rendering.

_.forTimes ​

See Render for Given Times.