LogRocket Blog

Build an efficient app with Qwik React

thumbnail

Qwik React: Building efficient apps with React integration

Qwik React is a package that allows you to integrate Qwik, a web application framework, with React. This enables you to leverage the benefits of both frameworks and create efficient web applications. In this tutorial, we'll explore how to use Qwik React to build apps with React integration.

Getting started

To get started with Qwik React, you'll need to create and configure a Qwik development environment. If you don't already have a Qwik application, you can quickly set one up by following these steps:

  1. Open your terminal and run the following commands to bootstrap a Qwik project, install the dependencies, and start the development server:
npx qwik start my-app
cd my-app
npm start
  1. Qwik CLI will guide you through an interactive menu to set up the app. It will create a src/integration folder where React components will be stored in our project.

By default, the project contains two routes (home and about) and a integration folder. The home route renders a React component that uses Material UI components.

Using the react function

The react function is a utility function in Qwik React that allows you to turn React components into Qwik islands. Here's an example of how to use the function:

import React from 'react';
import { react } from '@qwik/react';

function MyComponent() {
  return (
    <div>
      <h1>Hello, Qwik React!</h1>
    </div>
  );
}

export default react(MyComponent);

In this example, we created a React component called MyComponent, and then wrapped it with the react function. This allows us to use the component as a Qwik island in our application.

Partial hydration

Qwik React supports partial hydration, which allows you to selectively hydrate components to improve performance. You can choose which parts of a component need to be hydrated by using the QRL.PartialHydrate property.

Here's an example of how to use partial hydration with the react function:

import React from 'react';
import { react } from '@qwik/react';
import { QRL } from '@qwik/qwik';

function MyComponent(props) {
  return (
    <div>
      <h1>Hello, {props.name}!</h1>
    </div>
  );
}

export default react(MyComponent, { name: QRL.PartialHydrate });

In this example, we have a React component called MyComponent that receives a name prop. We only want to hydrate the name prop, so we use the QRL.PartialHydrate property for that specific prop.

Achieving interactivity without hydration

By default, Qwik React components are not interactive when rendered. However, you can achieve interactivity by using reactive primitives provided by Qwik, such as qEffect.

Here's an example of how to achieve interactivity in a Qwik React component:

import React from 'react';
import { react, qEffect } from '@qwik/react';

function MyComponent() {
  const [count, setCount] = React.useState(0);

  qEffect(() => {
    console.log('Count:', count);
  }, [count]);

  return (
    <div>
      <h1>Count: {count}</h1>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}

export default react(MyComponent);

In this example, we have a Qwik React component that displays a count and a button. When the button is clicked, the count is incremented and logged to the console using the qEffect reactive primitive.

Understanding inter-component communication

Qwik React supports inter-component communication using the Qwik messaging system. You can use the useService hook to access services and communicate between components.

Here's an example of how to use inter-component communication in Qwik React:

import React from 'react';
import { react, useService } from '@qwik/react';
import { MyService } from '../my-service';

function MyComponent() {
  const myService = useService(MyService);

  return (
    <div>
      <h1>Value: {myService.value}</h1>
      <button onClick={() => myService.increment()}>Increment</button>
    </div>
  );
}

export default react(MyComponent);

In this example, we have a Qwik React component that uses the useService hook to access MyService, a Qwik service. The component displays a value from the service and increments it when a button is clicked.

Integrating React libraries

Qwik React allows you to easily integrate React libraries into your Qwik application. You can import and use them just like in a regular React application.

Here's an example of how to integrate a React library in Qwik React:

import React from 'react';
import { react } from '@qwik/react';
import { Button } from 'my-react-library';

function MyComponent() {
  return (
    <div>
      <Button>Hello</Button>
    </div>
  );
}

export default react(MyComponent);

In this example, we have a Qwik React component that uses a Button component from a React library called my-react-library. The Button component can be used in the Qwik React component just like any other React component.

Limitations of Qwik React

While Qwik React offers many benefits for web application development, there are some limitations to be aware of:

  1. Components are isolated: Qwik React components are isolated from each other. This means that you need to use the Qwik messaging system to communicate between components.

  2. Is not as quick as React: Qwik React is still in its infancy and the ecosystem is not yet as mature or widely used as React. This means that there may be some limitations or performance issues compared to using React alone.

In conclusion, Qwik React is a powerful package that allows you to integrate Qwik and React to create efficient web applications. By leveraging the benefits of both frameworks, you can build highly performant and interactive apps.