An example utilty that uses [[resource]]
Any tracked data accessed in a tracked function before an await will "entangle" with the function -- we can call these accessed tracked properties, the "tracked prelude". If any properties within the tracked payload change, the function will re-run.
await
import Component from '@glimmer/component';import { tracked } from '@glimmer/tracking';import { trackedFunction } from 'ember-resources/util/function';class Demo extends Component { @tracked id = 1; request = trackedFunction(this, async () => { let response = await fetch(`https://swapi.dev/api/people/${this.id}`); let data = await response.json(); return data; // { name: 'Luke Skywalker', ... } }); updateId = (event) => this.id = event.target.value; // Renders "Luke Skywalker" <template> {{this.request.value.name}} <input value={{this.id}} {{on 'input' this.updateId}}> </template>}
Note, this example uses the proposed <template> syntax from the First-Class Component Templates RFC
<template>
Also note that after an await, the this context should not be accessed as it could lead to destruction/timing issues.
this
destroyable parent, e.g.: component instance aka "this"
the function to run with the return value available on .value
Generated using TypeDoc
An example utilty that uses [[resource]]
Any tracked data accessed in a tracked function before an
await
will "entangle" with the function -- we can call these accessed tracked properties, the "tracked prelude". If any properties within the tracked payload change, the function will re-run.Note, this example uses the proposed
<template>
syntax from the First-Class Component Templates RFCAlso note that after an
await
, thethis
context should not be accessed as it could lead to destruction/timing issues.