Cheat sheet

Hello world component

⚡️ Qwik

export const HelloWorld = component$(() => {
  return <div>Hello world</div>;
});

⚛️ React

export function HelloWorld() {
  return <div>Hello world</div>;
}

Button with a click handler

⚡️ Qwik

export const Button = component$(() => {
  return <button onClick$={() => console.log('click')}>Click me</button>;
});

⚛️ React

export function Button() {
  return <button onClick={() => console.log('click')}>Click me</button>;
}

Declare local state

⚡️ Qwik

export const LocalStateExample = component$(() => {
  const state = useStore({
    value: 0,
  });
  return <div>Value is: {state.value}</div>;
});

⚛️ React

export function UseStateExample() {
  const [value, setValue] = useState(0);
  return <div>Value is: {value}</div>;
}

Create a counter component

⚡️ Qwik

export const Counter = component$(() => {
  const state = useStore({
    count: 0,
  });
  return (
    <>
      <div>Value is: {state.count}</div>
      <button onClick$={() => state.count++}>Increment</button>
    </>
  );
});

⚛️ React

export function Counter() {
  const [count, setCount] = useState(0);
  return (
    <>
      <div>Value is: {count}</div>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </>
  );
}

Create a clock that increments every second

⚡️ Qwik

export const Clock = component$(() => {
  const state = useStore({
    seconds: 0,
  });
  useClientEffect$(() => {
    const interval = setInterval(() => {
      state.seconds++;
    }, 1000);
    return () => clearInterval(interval);
  });

  return <div>Seconds: {state.seconds}</div>;
});

⚛️ React

export function Clock() {
  const [seconds, setSeconds] = useState(0);
  useEffect(() => {
    const interval = setInterval(() => {
      setSeconds(seconds + 1);
    }, 1000);
    return () => clearInterval(interval);
  });
  return <div>Seconds: {seconds}</div>;
}

Perform a fetch request every time the state changes

⚡️ Qwik

export const Fetch = component$(() => {
  const state = useStore({
    url: 'https://api.github.com/repos/qwikstart/qwikstart-docs',
    responseJson: undefined,
  });

  useTask$(async ({ track }) => {
    track(() => state.url);
    const res = await fetch(state.url);
    const json = await res.json();
    state.responseJson = json;
  });

  return (
    <>
      <div>{state.responseJson?.name}</div>
      <input name="url" onInput$={(ev) => (state.url = (ev.target as HTMLInputElement).value))} />
    </>
  );
});

⚛️ React

export function Fetch() {
  const [url, setUrl] = useState('https://api.github.com/repos/qwikstart/qwikstart-docs');
  const [responseJson, setResponseJson] = useState(undefined);
  useEffect(() => {
    fetch(url)
      .then((res) => res.json())
      .then((json) => setResponseJson(json));
  }, [url]);
  return (
    <>
      <div>{responseJson?.name}</div>
      <input name="url" onInput={(ev) => setUrl((ev.target as HTMLInputElement).value))} />
    </>
  );
}

Declare some context and consume it

⚡️ Qwik

export const MyContext = createContext('my-context');

export const Parent = component$(() => {
  const state = useStore({
    message: 'some example value',
  });
  useContextProvider(MyContext, state);
  return (
    <>
      <Child />
    </>
  );
});

export const Child = component$(() => {
  const state = useContext(MyContext);
  return <span>{state.message}</span>;
});

⚛️ React

export const MyContext = createContext({ message: 'some example value' });

export default function Parent() {
  return (
    <MyContext.Provider value={{ message: 'updated example value' }}>
      <Child />
    </MyContext.Provider>
  );
}

export const Child = () => {
  const value = useContext(MyContext);
  return <span>{value.message}</span>;
};

Create a debounced input

⚡️ Qwik

export const DebouncedInput = component$(() => {
  const state = useStore({
    value: '',
    debouncedValue: '',
  });

  useTask$(({ track }) => {
    track(() => state.value);
    const debounced = setTimeout(() => {
      state.debouncedValue = state.value;
    }, 1000);
    return () => clearTimeout(debounced);
  });

  return (
    <>
      <input value={state.value} onInput$={(ev) => (state.value = (ev.target as HTMLInputElement).value))} />
      <span>{state.debouncedValue}</span>
    </>
  );
});

⚛️ React

export const DebouncedInput = () => {
  const [value, setValue] = useState('');
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    const debounced = setTimeout(() => setDebouncedValue(value), 1000);

    return () => {
      clearTimeout(debounced);
    };
  }, [value]);

  return (
    <>
      <input value={value} onChange={(ev) => setValue((ev.target as HTMLInputElement).value))} />
      <span>{debouncedValue}</span>
    </>
  );
};

Change background color randomly every button click

⚡️ Qwik

export const DynamicBackground = component$(() => {
  const state = useStore({
    red: 0,
    green: 0,
    blue: 0,
  });

  return (
    <div
      style={{
        background: `rgb(${state.red}, ${state.green}, ${state.blue})`,
      }}
    >
      <button
        onClick$={() => {
          state.red = Math.random() * 256;
          state.green = Math.random() * 256;
          state.blue = Math.random() * 256;
        }}
      >
        Change background
      </button>
    </div>
  );
});

⚛️ React

export function DynamicBackground() {
  const [red, setRed] = useState(0);
  const [green, setGreen] = useState(0);
  const [blue, setBlue] = useState(0);
  return (
    <div
      style={{
        background: `rgb(${red}, ${green}, ${blue})`,
      }}
    >
      <button
        onClick={() => {
          setRed(Math.random() * 256);
          setGreen(Math.random() * 256);
          setBlue(Math.random() * 256);
        }}
      >
        Change background
      </button>
    </div>
  );
}

Create a component that renders a list of the presidents

⚡️ Qwik

export const Presidents = component$(() => {
  const presidents = [
    { name: 'George Washington', years: '1789-1797' },
    { name: 'John Adams', years: '1797-1801' },
    { name: 'Thomas Jefferson', years: '1801-1809' },
    { name: 'James Madison', years: '1809-1817' },
    { name: 'James Monroe', years: '1817-1825' },
    { name: 'John Quincy Adams', years: '1825-1829' },
    { name: 'Andrew Jackson', years: '1829-1837' },
    { name: 'Martin Van Buren', years: '1837-1841' },
    { name: 'William Henry Harrison', years: '1841-1841' },
    { name: 'John Tyler', years: '1841-1845' },
    { name: 'James K. Polk', years: '1845-1849' },
    { name: 'Zachary Taylor', years: '1849-1850' },
    { name: 'Millard Fillmore', years: '1850-1853' },
    { name: 'Franklin Pierce', years: '1853-1857' },
    { name: 'James Buchanan', years: '1857-1861' },
    { name: 'Abraham Lincoln', years: '1861-1865' },
    { name: 'Andrew Johnson', years: '1865-1869' },
    { name: 'Ulysses S. Grant', years: '1869-1877' },
    { name: 'Rutherford B. Hayes', years: '1877-1881' },
    { name: 'James A. Garfield', years: '1881-1881' },
    { name: 'Chester A. Arthur', years: '1881-1885' },
    { name: 'Grover Cleveland', years: '1885-1889' },
  ];
  return (
    <ul>
      {presidents.map((president) => (
        <li key={president.name + president.years}>
          {president.name} ({president.years})
        </li>
      ))}
    </ul>
  );
});

⚛️ React

export function Presidents() {
  const presidents = [
    { name: 'George Washington', years: '1789-1797' },
    { name: 'John Adams', years: '1797-1801' },
    { name: 'Thomas Jefferson', years: '1801-1809' },
    { name: 'James Madison', years: '1809-1817' },
    { name: 'James Monroe', years: '1817-1825' },
    { name: 'John Quincy Adams', years: '1825-1829' },
    { name: 'Andrew Jackson', years: '1829-1837' },
    { name: 'Martin Van Buren', years: '1837-1841' },
    { name: 'William Henry Harrison', years: '1841-1841' },
    { name: 'John Tyler', years: '1841-1845' },
    { name: 'James K. Polk', years: '1845-1849' },
    { name: 'Zachary Taylor', years: '1849-1850' },
    { name: 'Millard Fillmore', years: '1850-1853' },
    { name: 'Franklin Pierce', years: '1853-1857' },
    { name: 'James Buchanan', years: '1857-1861' },
    { name: 'Abraham Lincoln', years: '1861-1865' },
    { name: 'Andrew Johnson', years: '1865-1869' },
    { name: 'Ulysses S. Grant', years: '1869-1877' },
    { name: 'Rutherford B. Hayes', years: '1877-1881' },
    { name: 'James A. Garfield', years: '1881-1881' },
    { name: 'Chester A. Arthur', years: '1881-1885' },
    { name: 'Grover Cleveland', years: '1885-1889' },
  ];
  return (
    <ul>
      {presidents.map((president) => (
        <li key={president.name + president.years}>
          {president.name} ({president.years})
        </li>
      ))}
    </ul>
  );
}
Made with ❤️ by