react-19

>

INSTALLATION
npx skills add https://github.com/prowler-cloud/prowler --skill react-19
Run in your project or agent environment. Adjust flags if your CLI version differs.

SKILL.md

$27

Imports (REQUIRED)

// ✅ ALWAYS: Named imports

import { useState, useEffect, useRef } from "react";

// ❌ NEVER

import React from "react";

import * as React from "react";

Server Components First

// ✅ Server Component (default) - no directive

export default async function Page() {

  const data = await fetchData();

  return <ClientComponent data={data} />;

}

// ✅ Client Component - only when needed

"use client";

export function Interactive() {

  const [state, setState] = useState(false);

  return <button onClick={() => setState(!state)}>Toggle</button>;

}

When to use "use client"

  • useState, useEffect, useRef, useContext
  • Event handlers (onClick, onChange)
  • Browser APIs (window, localStorage)

use() Hook

import { use } from "react";

// Read promises (suspends until resolved)

function Comments({ promise }) {

  const comments = use(promise);

  return comments.map(c => <div key={c.id}>{c.text}</div>);

}

// Conditional context (not possible with useContext!)

function Theme({ showTheme }) {

  if (showTheme) {

    const theme = use(ThemeContext);

    return <div style={{ color: theme.primary }}>Themed</div>;

  }

  return <div>Plain</div>;

}

Actions &#x26; useActionState

"use server";

async function submitForm(formData: FormData) {

  await saveToDatabase(formData);

  revalidatePath("/");

}

// With pending state

import { useActionState } from "react";

function Form() {

  const [state, action, isPending] = useActionState(submitForm, null);

  return (

    <form action={action}>

      <button disabled={isPending}>

        {isPending ? "Saving..." : "Save"}

      </button>

    </form>

  );

}

ref as Prop (No forwardRef)

// ✅ React 19: ref is just a prop

function Input({ ref, ...props }) {

  return <input ref={ref} {...props} />;

}

// ❌ Old way (unnecessary now)

const Input = forwardRef((props, ref) => <input ref={ref} {...props} />);
BrowserAct

Let your agent run on any real-world website

Bypass CAPTCHA & anti-bot for free. Start local, scale to cloud.

Explore BrowserAct Skills →

Stop writing automation&scrapers

Install the CLI. Run your first Skill in 30 seconds. Scale when you're ready.

Start free
free · no credit card