qwik icon indicating copy to clipboard operation
qwik copied to clipboard

[📖] Handling useResource$() without a <Resource />

Open Kampouse opened this issue 1 year ago • 1 comments

Suggestion

adding a explicit example on how to handle the case https://discord.com/channels/842438759945601056/1293247102637441064/1293570046924161055

import {
  component$,
  useResource$,
  useSignal,
  useTask$,
} from "@builder.io/qwik";

export const NoResourceNeeded = component$(() => {
  const tracked = useSignal(0);
  const resolvedValue = useSignal<number>();
  const rejectedValue = useSignal<any>();

  const resource = useResource$(({ track }) => {
    const value = track(() => tracked.value);

    return value + 1;
  });

  useTask$(async ({ track }) => {
    const promise = track(() => resource.value);

    try {
      resolvedValue.value = await promise;
    } catch (e) {
      rejectedValue.value = e;
    }
  });

  return (
    <div>
      {resource.loading && <div>Loading...</div>}
      {resolvedValue.value && <div>Resolved: {resolvedValue.value}</div>}
      {rejectedValue.value && <div>Rejected: {rejectedValue.value}</div>}

      <button onClick$={() => tracked.value++}>Click</button>
    </div>
  );
});

Kampouse avatar Oct 09 '24 21:10 Kampouse

Thanks @Kampouse!

For context: this was a very minimalist example I wrote to show someone how it could work. For doc purpose it could be improved a bit.

ianlet avatar Oct 10 '24 19:10 ianlet