Skip to content

Commit 9c62608

Browse files
authoredMar 6, 2025··
Merge pull request #78 from reactjs/sync-6ae99ddd
Sync with react.dev @ 6ae99dd
2 parents 28383ed + 57cf724 commit 9c62608

27 files changed

+174
-180
lines changed
 

Diff for: ‎README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ This repo contains the source code and documentation powering [sw.react.dev](htt
77
### Prerequisites
88

99
1. Git
10-
1. Node: any 12.x version starting with v12.0.0 or greater
10+
1. Node: any version starting with v16.8.0 or greater
1111
1. Yarn: See [Yarn website for installation instructions](https://yarnpkg.com/lang/en/docs/install/)
1212
1. A fork of the repo (for any contributions)
1313
1. A clone of the [sw.react.dev repo](https://github.com/reactjs/sw.react.dev) on your local machine

Diff for: ‎public/images/team/lauren.jpg

949 KB
Loading

Diff for: ‎src/content/blog/2024/04/25/react-19-upgrade-guide.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ This will run the following codemods from `react-codemod`:
113113
- [`replace-string-ref`](https://github.com/reactjs/react-codemod?tab=readme-ov-file#replace-string-ref)
114114
- [`replace-act-import`](https://github.com/reactjs/react-codemod?tab=readme-ov-file#replace-act-import)
115115
- [`replace-use-form-state`](https://github.com/reactjs/react-codemod?tab=readme-ov-file#replace-use-form-state)
116-
- [`prop-types-typescript`](TODO)
116+
- [`prop-types-typescript`](https://codemod.com/registry/react-prop-types-typescript)
117117

118118
This does not include the TypeScript changes. See [TypeScript changes](#typescript-changes) below.
119119

Diff for: ‎src/content/blog/2024/12/05/react-19.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Additions since this post was originally shared with the React 19 RC in April:
1717
- **Pre-warming for suspended trees**: see [Improvements to Suspense](/blog/2024/04/25/react-19-upgrade-guide#improvements-to-suspense).
1818
- **React DOM static APIs**: see [New React DOM Static APIs](#new-react-dom-static-apis).
1919

20-
_The date for this post has been update to reflect the stable release date._
20+
_The date for this post has been updated to reflect the stable release date._
2121

2222
</Note>
2323

@@ -362,7 +362,7 @@ React 19 includes all of the React Server Components features included from the
362362

363363
#### How do I build support for Server Components? {/*how-do-i-build-support-for-server-components*/}
364364

365-
While React Server Components in React 19 are stable and will not break between major versions, the underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.
365+
While React Server Components in React 19 are stable and will not break between minor versions, the underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.
366366

367367
To support React Server Components as a bundler or framework, we recommend pinning to a specific React version, or using the Canary release. We will continue working with bundlers and frameworks to stabilize the APIs used to implement React Server Components in the future.
368368

@@ -807,4 +807,4 @@ Thanks to [Joey Arhar](https://github.com/josepharhar) for driving the design an
807807
#### How to upgrade {/*how-to-upgrade*/}
808808
See the [React 19 Upgrade Guide](/blog/2024/04/25/react-19-upgrade-guide) for step-by-step instructions and a full list of breaking and notable changes.
809809

810-
_Note: this post was originally published 04/25/2024 and has been updated to 12/05/2024 with the stable release._
810+
_Note: this post was originally published 04/25/2024 and has been updated to 12/05/2024 with the stable release._

Diff for: ‎src/content/community/conferences.md

+42-31
Original file line numberDiff line numberDiff line change
@@ -10,62 +10,73 @@ Do you know of a local React.js conference? Add it here! (Please keep the list c
1010

1111
## Upcoming Conferences {/*upcoming-conferences*/}
1212

13-
### React Universe Conf 2024 {/*react-universe-conf-2024*/}
14-
September 5-6, 2024. Wrocław, Poland.
13+
### React Day Berlin 2024 {/*react-day-berlin-2024*/}
14+
December 13 & 16, 2024. In-person in Berlin, Germany + remote (hybrid event)
1515

16-
[Website](https://www.reactuniverseconf.com/) - [Twitter](https://twitter.com/react_native_eu) - [LinkedIn](https://www.linkedin.com/events/reactuniverseconf7163919537074118657/)
16+
[Website](https://reactday.berlin/) - [Twitter](https://x.com/reactdayberlin)
1717

18-
### React Alicante 2024 {/*react-alicante-2024*/}
19-
September 19-21, 2024. Alicante, Spain.
18+
### App.js Conf 2025 {/*appjs-conf-2025*/}
19+
May 28 - 30, 2025. In-person in Kraków, Poland + remote
2020

21-
[Website](https://reactalicante.es/) - [Twitter](https://twitter.com/ReactAlicante) - [YouTube](https://www.youtube.com/channel/UCaSdUaITU1Cz6PvC97A7e0w)
21+
[Website](https://appjs.co) - [Twitter](https://twitter.com/appjsconf)
2222

23-
### RenderCon Kenya 2024 {/*rendercon-kenya-2024*/}
24-
October 04 - 05, 2024. Nairobi, Kenya
23+
### React Summit 2025 {/*react-summit-2025*/}
24+
June 13 - 17, 2025. In-person in Amsterdam, Netherlands + remote (hybrid event)
2525

26-
[Website](https://rendercon.org/) - [Twitter](https://twitter.com/renderconke) - [LinkedIn](https://www.linkedin.com/company/renderconke/) - [YouTube](https://www.youtube.com/channel/UC0bCcG8gHUL4njDOpQGcMIA)
26+
[Website](https://reactsummit.com/) - [Twitter](https://x.com/reactsummit)
2727

28-
### React India 2024 {/*react-india-2024*/}
29-
October 17 - 19, 2024. In-person in Goa, India (hybrid event) + Oct 15 2024 - remote day
28+
## Past Conferences {/*past-conferences*/}
3029

31-
[Website](https://www.reactindia.io) - [Twitter](https://twitter.com/react_india) - [Facebook](https://www.facebook.com/ReactJSIndia) - [Youtube](https://www.youtube.com/channel/UCaFbHCBkPvVv1bWs_jwYt3w)
30+
### React Africa 2024 {/*react-africa-2024*/}
31+
November 29, 2024. In-person in Casablanca, Morocco (hybrid event)
3232

33-
### React Brussels 2024 {/*react-brussels-2024*/}
34-
October 18, 2024. In-person in Brussels, Belgium (hybrid event)
33+
[Website](https://react-africa.com/) - [Twitter](https://x.com/BeJS_)
3534

36-
[Website](https://www.react.brussels/) - [Twitter](https://x.com/BrusselsReact)
35+
### React Summit US 2024 {/*react-summit-us-2024*/}
36+
November 19 & 22, 2024. In-person in New York, USA + online (hybrid event)
3737

38-
### reactjsday 2024 {/*reactjsday-2024*/}
39-
October 25, 2024. In-person in Verona, Italy + online (hybrid event)
38+
[Website](https://reactsummit.us/) - [Twitter](https://twitter.com/reactsummit) - [Videos](https://portal.gitnation.org/)
4039

41-
[Website](https://2024.reactjsday.it/) - [Twitter](https://x.com/reactjsday) - [Facebook](https://www.facebook.com/GrUSP/) - [YouTube](https://www.youtube.com/c/grusp)
40+
### React Native London Conf 2024 {/*react-native-london-2024*/}
41+
November 14 & 15, 2024. In-person in London, UK
42+
43+
[Website](https://reactnativelondon.co.uk/) - [Twitter](https://x.com/RNLConf)
4244

4345
### React Advanced London 2024 {/*react-advanced-london-2024*/}
4446
October 25 & 28, 2024. In-person in London, UK + online (hybrid event)
4547

4648
[Website](https://reactadvanced.com/) - [Twitter](https://x.com/reactadvanced)
4749

48-
### React Native London Conf 2024 {/*react-native-london-2024*/}
49-
November 14 & 15, 2024. In-person in London, UK
50+
### reactjsday 2024 {/*reactjsday-2024*/}
51+
October 25, 2024. In-person in Verona, Italy + online (hybrid event)
5052

51-
[Website](https://reactnativelondon.co.uk/) - [Twitter](https://x.com/RNLConf)
53+
[Website](https://2024.reactjsday.it/) - [Twitter](https://x.com/reactjsday) - [Facebook](https://www.facebook.com/GrUSP/) - [YouTube](https://www.youtube.com/c/grusp)
5254

53-
### React Summit US 2024 {/*react-summit-us-2024*/}
54-
November 19 & 22, 2024. In-person in New York, USA + online (hybrid event)
55+
### React Brussels 2024 {/*react-brussels-2024*/}
56+
October 18, 2024. In-person in Brussels, Belgium (hybrid event)
5557

56-
[Website](https://reactsummit.us/) - [Twitter](https://twitter.com/reactsummit) - [Videos](https://portal.gitnation.org/)
58+
[Website](https://www.react.brussels/) - [Twitter](https://x.com/BrusselsReact)
5759

58-
### React Africa 2024 {/*react-africa-2024*/}
59-
November 29, 2024. In-person in Casablanca, Morocco (hybrid event)
60+
### React India 2024 {/*react-india-2024*/}
61+
October 17 - 19, 2024. In-person in Goa, India (hybrid event) + Oct 15 2024 - remote day
6062

61-
[Website](https://react-africa.com/) - [Twitter](https://x.com/BeJS_)
63+
[Website](https://www.reactindia.io) - [Twitter](https://twitter.com/react_india) - [Facebook](https://www.facebook.com/ReactJSIndia) - [Youtube](https://www.youtube.com/channel/UCaFbHCBkPvVv1bWs_jwYt3w)
6264

63-
### React Day Berlin 2024 {/*react-day-berlin-2024*/}
64-
December 13 & 16, 2024. In-person in Berlin, Germany + remote (hybrid event)
65+
### RenderCon Kenya 2024 {/*rendercon-kenya-2024*/}
66+
October 04 - 05, 2024. Nairobi, Kenya
6567

66-
[Website](https://reactday.berlin/) - [Twitter](https://x.com/reactdayberlin)
68+
[Website](https://rendercon.org/) - [Twitter](https://twitter.com/renderconke) - [LinkedIn](https://www.linkedin.com/company/renderconke/) - [YouTube](https://www.youtube.com/channel/UC0bCcG8gHUL4njDOpQGcMIA)
69+
70+
### React Alicante 2024 {/*react-alicante-2024*/}
71+
September 19-21, 2024. Alicante, Spain.
72+
73+
[Website](https://reactalicante.es/) - [Twitter](https://twitter.com/ReactAlicante) - [YouTube](https://www.youtube.com/channel/UCaSdUaITU1Cz6PvC97A7e0w)
74+
75+
### React Universe Conf 2024 {/*react-universe-conf-2024*/}
76+
September 5-6, 2024. Wrocław, Poland.
77+
78+
[Website](https://www.reactuniverseconf.com/) - [Twitter](https://twitter.com/react_native_eu) - [LinkedIn](https://www.linkedin.com/events/reactuniverseconf7163919537074118657/)
6779

68-
## Past Conferences {/*past-conferences*/}
6980

7081
### React Rally 2024 🐙 {/*react-rally-2024*/}
7182
August 12-13, 2024. Park City, UT, USA

Diff for: ‎src/content/community/team.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Current members of the React team are listed in alphabetical order below.
4343
</TeamMember>
4444

4545
<TeamMember name="Lauren Tan" permalink="lauren-tan" photo="/images/team/lauren.jpg" github="poteto" twitter="potetotes" threads="potetotes" bsky="no.lol" title="Engineer at Meta">
46-
Lauren's programming career peaked when she first discovered the `<marquee>` tag. She’s been chasing that high ever since. She studied Finance instead of CS in college, so she learned to code using Excel instead of Java. Lauren enjoys dropping cheeky memes in chat, playing video games with her partner, and petting her dog Zelda.
46+
Lauren's programming career peaked when she first discovered the `<marquee>` tag. She’s been chasing that high ever since. She studied Finance instead of CS in college, so she learned to code using Excel. Lauren enjoys dropping cheeky memes in chat, playing video games with her partner, learning Korean, and petting her dog Zelda.
4747
</TeamMember>
4848

4949
<TeamMember name="Luna Wei" permalink="luna-wei" photo="/images/team/luna-wei.jpg" github="lunaleaps" twitter="lunaleaps" threads="lunaleaps" title="Engineer at Meta">

Diff for: ‎src/content/learn/index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: Quick Start
44

55
<Intro>
66

7-
Welcome to the React documentation! This page will give you an introduction to the 80% of React concepts that you will use on a daily basis.
7+
Welcome to the React documentation! This page will give you an introduction to 80% of the React concepts that you will use on a daily basis.
88

99
</Intro>
1010

Diff for: ‎src/content/learn/manipulating-the-dom-with-refs.md

+24-68
Original file line numberDiff line numberDiff line change
@@ -343,75 +343,39 @@ Read more about [how this helps find bugs](/reference/react/StrictMode#fixing-bu
343343

344344
## Accessing another component's DOM nodes {/*accessing-another-components-dom-nodes*/}
345345

346-
When you put a ref on a built-in component that outputs a browser element like `<input />`, React will set that ref's `current` property to the corresponding DOM node (such as the actual `<input />` in the browser).
346+
<Pitfall>
347+
Refs are an escape hatch. Manually manipulating _another_ component's DOM nodes can make your code fragile.
348+
</Pitfall>
347349

348-
However, if you try to put a ref on **your own** component, like `<MyInput />`, by default you will get `null`. Here is an example demonstrating it. Notice how clicking the button **does not** focus the input:
350+
You can pass refs from parent component to child components [just like any other prop](/learn/passing-props-to-a-component).
349351

350-
<Sandpack>
351-
352-
```js
352+
```js {3-4,9}
353353
import { useRef } from 'react';
354354

355-
function MyInput(props) {
356-
return <input {...props} />;
355+
function MyInput({ ref }) {
356+
return <input ref={ref} />;
357357
}
358358

359-
export default function MyForm() {
359+
function MyForm() {
360360
const inputRef = useRef(null);
361-
362-
function handleClick() {
363-
inputRef.current.focus();
364-
}
365-
366-
return (
367-
<>
368-
<MyInput ref={inputRef} />
369-
<button onClick={handleClick}>
370-
Focus the input
371-
</button>
372-
</>
373-
);
361+
return <MyInput ref={inputRef} />
374362
}
375363
```
376364

377-
</Sandpack>
378-
379-
To help you notice the issue, React also prints an error to the console:
380-
381-
<ConsoleBlock level="error">
382-
383-
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
384-
385-
</ConsoleBlock>
386-
387-
This happens because by default React does not let a component access the DOM nodes of other components. Not even for its own children! This is intentional. Refs are an escape hatch that should be used sparingly. Manually manipulating _another_ component's DOM nodes makes your code even more fragile.
388-
389-
Instead, components that _want_ to expose their DOM nodes have to **opt in** to that behavior. A component can specify that it "forwards" its ref to one of its children. Here's how `MyInput` can use the `forwardRef` API:
390-
391-
```js
392-
const MyInput = forwardRef((props, ref) => {
393-
return <input {...props} ref={ref} />;
394-
});
395-
```
396-
397-
This is how it works:
398-
399-
1. `<MyInput ref={inputRef} />` tells React to put the corresponding DOM node into `inputRef.current`. However, it's up to the `MyInput` component to opt into that--by default, it doesn't.
400-
2. The `MyInput` component is declared using `forwardRef`. **This opts it into receiving the `inputRef` from above as the second `ref` argument** which is declared after `props`.
401-
3. `MyInput` itself passes the `ref` it received to the `<input>` inside of it.
365+
In the above example, a ref is created in the parent component, `MyForm`, and is passed to the child component, `MyInput`. `MyInput` then passes the ref to `<input>`. Because `<input>` is a [built-in component](/reference/react-dom/components/common) React sets the `.current` property of the ref to the `<input>` DOM element.
402366

403-
Now clicking the button to focus the input works:
367+
The `inputRef` created in `MyForm` now points to the `<input>` DOM element returned by `MyInput`. A click handler created in `MyForm` can access `inputRef` and call `focus()` to set the focus on `<input>`.
404368

405369
<Sandpack>
406370

407371
```js
408-
import { forwardRef, useRef } from 'react';
372+
import { useRef } from 'react';
409373

410-
const MyInput = forwardRef((props, ref) => {
411-
return <input {...props} ref={ref} />;
412-
});
374+
function MyInput({ ref }) {
375+
return <input ref={ref} />;
376+
}
413377

414-
export default function Form() {
378+
export default function MyForm() {
415379
const inputRef = useRef(null);
416380

417381
function handleClick() {
@@ -431,33 +395,27 @@ export default function Form() {
431395

432396
</Sandpack>
433397

434-
In design systems, it is a common pattern for low-level components like buttons, inputs, and so on, to forward their refs to their DOM nodes. On the other hand, high-level components like forms, lists, or page sections usually won't expose their DOM nodes to avoid accidental dependencies on the DOM structure.
435-
436398
<DeepDive>
437399

438400
#### Exposing a subset of the API with an imperative handle {/*exposing-a-subset-of-the-api-with-an-imperative-handle*/}
439401

440-
In the above example, `MyInput` exposes the original DOM input element. This lets the parent component call `focus()` on it. However, this also lets the parent component do something else--for example, change its CSS styles. In uncommon cases, you may want to restrict the exposed functionality. You can do that with `useImperativeHandle`:
402+
In the above example, the ref passed to `MyInput` is passed on to the original DOM input element. This lets the parent component call `focus()` on it. However, this also lets the parent component do something else--for example, change its CSS styles. In uncommon cases, you may want to restrict the exposed functionality. You can do that with [`useImperativeHandle`](/reference/react/useImperativeHandle):
441403

442404
<Sandpack>
443405

444406
```js
445-
import {
446-
forwardRef,
447-
useRef,
448-
useImperativeHandle
449-
} from 'react';
407+
import { useRef, useImperativeHandle } from "react";
450408

451-
const MyInput = forwardRef((props, ref) => {
409+
function MyInput({ ref }) {
452410
const realInputRef = useRef(null);
453411
useImperativeHandle(ref, () => ({
454412
// Only expose focus and nothing else
455413
focus() {
456414
realInputRef.current.focus();
457415
},
458416
}));
459-
return <input {...props} ref={realInputRef} />;
460-
});
417+
return <input ref={realInputRef} />;
418+
};
461419

462420
export default function Form() {
463421
const inputRef = useRef(null);
@@ -469,17 +427,15 @@ export default function Form() {
469427
return (
470428
<>
471429
<MyInput ref={inputRef} />
472-
<button onClick={handleClick}>
473-
Focus the input
474-
</button>
430+
<button onClick={handleClick}>Focus the input</button>
475431
</>
476432
);
477433
}
478434
```
479435

480436
</Sandpack>
481437

482-
Here, `realInputRef` inside `MyInput` holds the actual input DOM node. However, `useImperativeHandle` instructs React to provide your own special object as the value of a ref to the parent component. So `inputRef.current` inside the `Form` component will only have the `focus` method. In this case, the ref "handle" is not the DOM node, but the custom object you create inside `useImperativeHandle` call.
438+
Here, `realInputRef` inside `MyInput` holds the actual input DOM node. However, [`useImperativeHandle`](/reference/react/useImperativeHandle) instructs React to provide your own special object as the value of a ref to the parent component. So `inputRef.current` inside the `Form` component will only have the `focus` method. In this case, the ref "handle" is not the DOM node, but the custom object you create inside [`useImperativeHandle`](/reference/react/useImperativeHandle) call.
483439

484440
</DeepDive>
485441

@@ -591,7 +547,7 @@ export default function TodoList() {
591547
const newTodo = { id: nextId++, text: text };
592548
flushSync(() => {
593549
setText('');
594-
setTodos([ ...todos, newTodo]);
550+
setTodos([ ...todos, newTodo]);
595551
});
596552
listRef.current.lastChild.scrollIntoView({
597553
behavior: 'smooth',

Diff for: ‎src/content/learn/react-compiler.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ React Compiler can verify many of the Rules of React statically, and will safely
347347

348348
### How do I know my components have been optimized? {/*how-do-i-know-my-components-have-been-optimized*/}
349349

350-
[React Devtools](/learn/react-developer-tools) (v5.0+) has built-in support for React Compiler and will display a "Memo ✨" badge next to components that have been optimized by the compiler.
350+
[React DevTools](/learn/react-developer-tools) (v5.0+) and [React Native DevTools](https://reactnative.dev/docs/react-native-devtools) have built-in support for React Compiler and will display a "Memo ✨" badge next to components that have been optimized by the compiler.
351351

352352
### Something is not working after compilation {/*something-is-not-working-after-compilation*/}
353353
If you have eslint-plugin-react-compiler installed, the compiler will display any violations of the rules of React in your editor. When it does this, it means that the compiler has skipped over optimizing that component or hook. This is perfectly okay, and the compiler can recover and continue optimizing other components in your codebase. **You don't have to fix all ESLint violations straight away.** You can address them at your own pace to increase the amount of components and hooks being optimized.

Diff for: ‎src/content/reference/react-dom/components/form.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ To create interactive controls for submitting information, render the [built-in
5050

5151
### Handle form submission on the client {/*handle-form-submission-on-the-client*/}
5252

53-
Pass a function to the `action` prop of form to run the function when the form is submitted. [`formData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) will be passed to the function as an argument so you can access the data submitted by the form. This differs from the conventional [HTML action](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#action), which only accepts URLs.
53+
Pass a function to the `action` prop of form to run the function when the form is submitted. [`formData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) will be passed to the function as an argument so you can access the data submitted by the form. This differs from the conventional [HTML action](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/form#action), which only accepts URLs. After the `action` function succeeds, all uncontrolled field elements in the form are reset.
5454

5555
<Sandpack>
5656

@@ -117,7 +117,7 @@ function AddToCart({productId}) {
117117
}
118118
```
119119

120-
When `<form>` is rendered by a [Server Component](/reference/rsc/use-client), and a [Server Function](/reference/rsc/server-function) is passed to the `<form>`'s `action` prop, the form is [progressively enhanced](https://developer.mozilla.org/en-US/docs/Glossary/Progressive_Enhancement).
120+
When `<form>` is rendered by a [Server Component](/reference/rsc/use-client), and a [Server Function](/reference/rsc/server-functions) is passed to the `<form>`'s `action` prop, the form is [progressively enhanced](https://developer.mozilla.org/en-US/docs/Glossary/Progressive_Enhancement).
121121

122122
### Display a pending state during form submission {/*display-a-pending-state-during-form-submission*/}
123123
To display a pending state when a form is being submitted, you can call the `useFormStatus` Hook in a component rendered in a `<form>` and read the `pending` property returned.

Diff for: ‎src/content/reference/react-dom/components/link.md

+10-5
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,7 @@ export default function SiteMapPage() {
151151

152152
### Controlling stylesheet precedence {/*controlling-stylesheet-precedence*/}
153153

154-
Stylesheets can conflict with each other, and when they do, the browser goes with the one that comes later in the document. React lets you control the order of stylesheets with the `precedence` prop. In this example, two components render stylesheets, and the one with the higher precedence goes later in the document even though the component that renders it comes earlier.
155-
156-
{/*FIXME: this doesn't appear to actually work -- I guess precedence isn't implemented yet?*/}
154+
Stylesheets can conflict with each other, and when they do, the browser goes with the one that comes later in the document. React lets you control the order of stylesheets with the `precedence` prop. In this example, three components render stylesheets, and the ones with the same precedence are grouped together in the `<head>`.
157155

158156
<SandpackWithHTMLOutput>
159157

@@ -165,23 +163,30 @@ export default function HomePage() {
165163
<ShowRenderedHTML>
166164
<FirstComponent />
167165
<SecondComponent />
166+
<ThirdComponent/>
168167
...
169168
</ShowRenderedHTML>
170169
);
171170
}
172171

173172
function FirstComponent() {
174-
return <link rel="stylesheet" href="first.css" precedence="high" />;
173+
return <link rel="stylesheet" href="first.css" precedence="first" />;
175174
}
176175

177176
function SecondComponent() {
178-
return <link rel="stylesheet" href="second.css" precedence="low" />;
177+
return <link rel="stylesheet" href="second.css" precedence="second" />;
178+
}
179+
180+
function ThirdComponent() {
181+
return <link rel="stylesheet" href="third.css" precedence="first" />;
179182
}
180183

181184
```
182185

183186
</SandpackWithHTMLOutput>
184187

188+
Note the `precedence` values themselves are arbitrary and their naming is up to you. React will infer that precedence values it discovers first are "lower" and precedence values it discovers later are "higher".
189+
185190
### Deduplicated stylesheet rendering {/*deduplicated-stylesheet-rendering*/}
186191

187192
If you render the same stylesheet from multiple components, React will place only a single `<link>` in the document head.

Diff for: ‎src/content/reference/react-dom/components/style.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,11 @@ This special treatment comes with two caveats:
6262

6363
If a component depends on certain CSS styles in order to be displayed correctly, you can render an inline stylesheet within the component.
6464

65-
If you supply an `href` and `precedence` prop, your component will suspend while the stylesheet is loading. (Even with inline stylesheets, there may be a loading time due to fonts and images that the stylesheet refers to.) The `href` prop should uniquely identify the stylesheet, because React will de-duplicate stylesheets that have the same `href`.
65+
The `href` prop should uniquely identify the stylesheet, because React will de-duplicate stylesheets that have the same `href`.
66+
If you supply a `precedence` prop, React will reorder inline stylesheets based on the order these values appear in the component tree.
67+
68+
Inline stylesheets will not trigger Suspense boundaries while they're loading.
69+
Even if they load async resources like fonts or images.
6670

6771
<SandpackWithHTMLOutput>
6872

Diff for: ‎src/content/reference/react-dom/hooks/useFormStatus.md

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
---
22
title: useFormStatus
3-
canary: true
43
---
54

65
<Intro>

Diff for: ‎src/content/reference/react-dom/static/prerenderToNodeStream.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: prerenderToNodeStream
44

55
<Intro>
66

7-
`prerender` renders a React tree to a static HTML string using a [Node.js Stream.](https://nodejs.org/api/stream.html).
7+
`prerenderToNodeStream` renders a React tree to a static HTML string using a [Node.js Stream.](https://nodejs.org/api/stream.html).
88

99
```js
1010
const {prelude} = await prerenderToNodeStream(reactNode, options?)
@@ -292,4 +292,4 @@ Suspense-enabled data fetching without the use of an opinionated framework is no
292292
The `prerenderToNodeStream` response waits for the entire app to finish rendering, including waiting for all suspense boundaries to resolve, before resolving. It is designed for static site generation (SSG) ahead of time and does not support streaming more content as it loads.
293293
294294
To stream content as it loads, use a streaming server render API like [renderToPipeableStream](/reference/react-dom/server/renderToPipeableStream).
295-
295+

Diff for: ‎src/content/reference/react/Suspense.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ async function getAlbums() {
207207

208208
**Only Suspense-enabled data sources will activate the Suspense component.** They include:
209209

210-
- Data fetching with Suspense-enabled frameworks like [Relay](https://relay.dev/docs/guided-tour/rendering/loading-states/) and [Next.js](https://nextjs.org/docs/getting-started/react-essentials)
210+
- Data fetching with Suspense-enabled frameworks like [Relay](https://relay.dev/docs/guided-tour/rendering/loading-states/) and [Next.js](https://nextjs.org/docs/app/building-your-application/routing/loading-ui-and-streaming#streaming-with-suspense)
211211
- Lazy-loading component code with [`lazy`](/reference/react/lazy)
212212
- Reading the value of a cached Promise with [`use`](/reference/react/use)
213213

Diff for: ‎src/content/reference/react/act.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,13 @@ function Counter() {
7070
}
7171

7272
useEffect(() => {
73-
document.title = `You clicked ${this.state.count} times`;
73+
document.title = `You clicked ${count} times`;
7474
}, [count]);
7575

7676
return (
7777
<div>
78-
<p>You clicked {this.state.count} times</p>
79-
<button onClick={this.handleClick}>
78+
<p>You clicked {count} times</p>
79+
<button onClick={handleClick}>
8080
Click me
8181
</button>
8282
</div>

Diff for: ‎src/content/reference/react/createContext.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ function Button() {
8484
}
8585
```
8686

87-
Although this older way still works, but **newly written code should read context with [`useContext()`](/reference/react/useContext) instead:**
87+
Although this older way still works, **newly written code should read context with [`useContext()`](/reference/react/useContext) instead:**
8888

8989
```js
9090
function Button() {

Diff for: ‎src/content/reference/react/startTransition.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ function TabContainer() {
4141

4242
#### Parameters {/*parameters*/}
4343

44-
* `action`: A function that updates some state by calling one or more [`set` functions](/reference/react/useState#setstate). React calls `action` immediately with no parameters and marks all state updates scheduled synchronously during the `action` function call as Transitions. Any async calls awaited in the `action` will be included in the transition, but currently require wrapping any `set` functions after the `await` in an additional `startTransition` (see [Troubleshooting](#react-doesnt-treat-my-state-update-after-await-as-a-transition)). State updates marked as Transitions will be [non-blocking](#marking-a-state-update-as-a-non-blocking-transition) and [will not display unwanted loading indicators.](#preventing-unwanted-loading-indicators).
44+
* `action`: A function that updates some state by calling one or more [`set` functions](/reference/react/useState#setstate). React calls `action` immediately with no parameters and marks all state updates scheduled synchronously during the `action` function call as Transitions. Any async calls awaited in the `action` will be included in the transition, but currently require wrapping any `set` functions after the `await` in an additional `startTransition` (see [Troubleshooting](/reference/react/useTransition#react-doesnt-treat-my-state-update-after-await-as-a-transition)). State updates marked as Transitions will be [non-blocking](#marking-a-state-update-as-a-non-blocking-transition) and [will not display unwanted loading indicators.](/reference/react/useTransition#preventing-unwanted-loading-indicators).
4545

4646
#### Returns {/*returns*/}
4747

@@ -53,9 +53,9 @@ function TabContainer() {
5353

5454
* You can wrap an update into a Transition only if you have access to the `set` function of that state. If you want to start a Transition in response to some prop or a custom Hook return value, try [`useDeferredValue`](/reference/react/useDeferredValue) instead.
5555

56-
* The function you pass to the of `startTransition` is called immediately, marking all state updates that happen while it executes as Transitions. If you try to perform state updates in a `setTimeout`, for example, they won't be marked as Transitions.
56+
* The function you pass to `startTransition` is called immediately, marking all state updates that happen while it executes as Transitions. If you try to perform state updates in a `setTimeout`, for example, they won't be marked as Transitions.
5757

58-
* You must wrap any state updates after any async requests in another `startTransition` to mark them as Transitions. This is a known limitation that we will fix in the future (see [Troubleshooting](#react-doesnt-treat-my-state-update-after-await-as-a-transition)).
58+
* You must wrap any state updates after any async requests in another `startTransition` to mark them as Transitions. This is a known limitation that we will fix in the future (see [Troubleshooting](/reference/react/useTransition#react-doesnt-treat-my-state-update-after-await-as-a-transition)).
5959

6060
* A state update marked as a Transition will be interrupted by other state updates. For example, if you update a chart component inside a Transition, but then start typing into an input while the chart is in the middle of a re-render, React will restart the rendering work on the chart component after handling the input state update.
6161

Diff for: ‎src/content/reference/react/use.md

+11
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,17 @@ root.render(
397397
);
398398
```
399399
400+
```json package.json hidden
401+
{
402+
"dependencies": {
403+
"react": "19.0.0",
404+
"react-dom": "19.0.0",
405+
"react-scripts": "^5.0.0",
406+
"react-error-boundary": "4.0.3"
407+
},
408+
"main": "/index.js"
409+
}
410+
```
400411
</Sandpack>
401412
402413
#### Providing an alternative value with `Promise.catch` {/*providing-an-alternative-value-with-promise-catch*/}

Diff for: ‎src/content/reference/react/useImperativeHandle.md

+36-32
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ useImperativeHandle(ref, createHandle, dependencies?)
2323
Call `useImperativeHandle` at the top level of your component to customize the ref handle it exposes:
2424
2525
```js
26-
import { forwardRef, useImperativeHandle } from 'react';
26+
import { useImperativeHandle } from 'react';
2727

28-
const MyInput = forwardRef(function MyInput(props, ref) {
28+
function MyInput({ ref }) {
2929
useImperativeHandle(ref, () => {
3030
return {
3131
// ... your methods ...
@@ -38,12 +38,18 @@ const MyInput = forwardRef(function MyInput(props, ref) {
3838
3939
#### Parameters {/*parameters*/}
4040
41-
* `ref`: The `ref` you received as the second argument from the [`forwardRef` render function.](/reference/react/forwardRef#render-function)
41+
* `ref`: The `ref` you received as a prop to the `MyInput` component.
4242
4343
* `createHandle`: A function that takes no arguments and returns the ref handle you want to expose. That ref handle can have any type. Usually, you will return an object with the methods you want to expose.
4444
4545
* **optional** `dependencies`: The list of all reactive values referenced inside of the `createHandle` code. Reactive values include props, state, and all the variables and functions declared directly inside your component body. If your linter is [configured for React](/learn/editor-setup#linting), it will verify that every reactive value is correctly specified as a dependency. The list of dependencies must have a constant number of items and be written inline like `[dep1, dep2, dep3]`. React will compare each dependency with its previous value using the [`Object.is`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) comparison. If a re-render resulted in a change to some dependency, or if you omitted this argument, your `createHandle` function will re-execute, and the newly created handle will be assigned to the ref.
4646
47+
<Note>
48+
49+
Starting with React 19, [`ref` is available a prop.](/blog/2024/12/05/react-19#ref-as-a-prop) In React 18 and earlier, it was necessary to get the `ref` from [`forwardRef`.](/reference/react/forwardRef)
50+
51+
</Note>
52+
4753
#### Returns {/*returns*/}
4854
4955
`useImperativeHandle` returns `undefined`.
@@ -54,40 +60,38 @@ const MyInput = forwardRef(function MyInput(props, ref) {
5460
5561
### Exposing a custom ref handle to the parent component {/*exposing-a-custom-ref-handle-to-the-parent-component*/}
5662
57-
By default, components don't expose their DOM nodes to parent components. For example, if you want the parent component of `MyInput` to [have access](/learn/manipulating-the-dom-with-refs) to the `<input>` DOM node, you have to opt in with [`forwardRef`:](/reference/react/forwardRef)
58-
59-
```js {4}
60-
import { forwardRef } from 'react';
63+
To expose a DOM node to the parent element, pass in the `ref` prop to the node.
6164
62-
const MyInput = forwardRef(function MyInput(props, ref) {
63-
return <input {...props} ref={ref} />;
64-
});
65+
```js {2}
66+
function MyInput({ ref }) {
67+
return <input ref={ref} />;
68+
};
6569
```
6670
67-
With the code above, [a ref to `MyInput` will receive the `<input>` DOM node.](/reference/react/forwardRef#exposing-a-dom-node-to-the-parent-component) However, you can expose a custom value instead. To customize the exposed handle, call `useImperativeHandle` at the top level of your component:
71+
With the code above, [a ref to `MyInput` will receive the `<input>` DOM node.](/learn/manipulating-the-dom-with-refs) However, you can expose a custom value instead. To customize the exposed handle, call `useImperativeHandle` at the top level of your component:
6872
6973
```js {4-8}
70-
import { forwardRef, useImperativeHandle } from 'react';
74+
import { useImperativeHandle } from 'react';
7175

72-
const MyInput = forwardRef(function MyInput(props, ref) {
76+
function MyInput({ ref }) {
7377
useImperativeHandle(ref, () => {
7478
return {
7579
// ... your methods ...
7680
};
7781
}, []);
7882

79-
return <input {...props} />;
80-
});
83+
return <input />;
84+
};
8185
```
8286
83-
Note that in the code above, the `ref` is no longer forwarded to the `<input>`.
87+
Note that in the code above, the `ref` is no longer passed to the `<input>`.
8488
8589
For example, suppose you don't want to expose the entire `<input>` DOM node, but you want to expose two of its methods: `focus` and `scrollIntoView`. To do this, keep the real browser DOM in a separate ref. Then use `useImperativeHandle` to expose a handle with only the methods that you want the parent component to call:
8690
8791
```js {7-14}
88-
import { forwardRef, useRef, useImperativeHandle } from 'react';
92+
import { useRef, useImperativeHandle } from 'react';
8993

90-
const MyInput = forwardRef(function MyInput(props, ref) {
94+
function MyInput({ ref }) {
9195
const inputRef = useRef(null);
9296

9397
useImperativeHandle(ref, () => {
@@ -101,8 +105,8 @@ const MyInput = forwardRef(function MyInput(props, ref) {
101105
};
102106
}, []);
103107

104-
return <input {...props} ref={inputRef} />;
105-
});
108+
return <input ref={inputRef} />;
109+
};
106110
```
107111
108112
Now, if the parent component gets a ref to `MyInput`, it will be able to call the `focus` and `scrollIntoView` methods on it. However, it will not have full access to the underlying `<input>` DOM node.
@@ -134,9 +138,9 @@ export default function Form() {
134138
```
135139
136140
```js src/MyInput.js
137-
import { forwardRef, useRef, useImperativeHandle } from 'react';
141+
import { useRef, useImperativeHandle } from 'react';
138142

139-
const MyInput = forwardRef(function MyInput(props, ref) {
143+
function MyInput({ ref, ...props }) {
140144
const inputRef = useRef(null);
141145

142146
useImperativeHandle(ref, () => {
@@ -151,7 +155,7 @@ const MyInput = forwardRef(function MyInput(props, ref) {
151155
}, []);
152156

153157
return <input {...props} ref={inputRef} />;
154-
});
158+
};
155159

156160
export default MyInput;
157161
```
@@ -195,11 +199,11 @@ export default function Page() {
195199
```
196200
197201
```js src/Post.js
198-
import { forwardRef, useRef, useImperativeHandle } from 'react';
202+
import { useRef, useImperativeHandle } from 'react';
199203
import CommentList from './CommentList.js';
200204
import AddComment from './AddComment.js';
201205

202-
const Post = forwardRef((props, ref) => {
206+
function Post({ ref }) {
203207
const commentsRef = useRef(null);
204208
const addCommentRef = useRef(null);
205209

@@ -221,16 +225,16 @@ const Post = forwardRef((props, ref) => {
221225
<AddComment ref={addCommentRef} />
222226
</>
223227
);
224-
});
228+
};
225229

226230
export default Post;
227231
```
228232
229233
230234
```js src/CommentList.js
231-
import { forwardRef, useRef, useImperativeHandle } from 'react';
235+
import { useRef, useImperativeHandle } from 'react';
232236

233-
const CommentList = forwardRef(function CommentList(props, ref) {
237+
function CommentList({ ref }) {
234238
const divRef = useRef(null);
235239

236240
useImperativeHandle(ref, () => {
@@ -252,17 +256,17 @@ const CommentList = forwardRef(function CommentList(props, ref) {
252256
{comments}
253257
</div>
254258
);
255-
});
259+
}
256260

257261
export default CommentList;
258262
```
259263
260264
```js src/AddComment.js
261-
import { forwardRef, useRef, useImperativeHandle } from 'react';
265+
import { useRef, useImperativeHandle } from 'react';
262266

263-
const AddComment = forwardRef(function AddComment(props, ref) {
267+
function AddComment({ ref }) {
264268
return <input placeholder="Add comment..." ref={ref} />;
265-
});
269+
}
266270

267271
export default AddComment;
268272
```

Diff for: ‎src/content/reference/react/useMemo.md

+1-2
Original file line numberDiff line numberDiff line change
@@ -1101,11 +1101,10 @@ function ChatRoom({ roomId }) {
11011101
}, [roomId]); // ✅ Only changes when roomId changes
11021102

11031103
useEffect(() => {
1104-
const options = createOptions();
11051104
const connection = createConnection(options);
11061105
connection.connect();
11071106
return () => connection.disconnect();
1108-
}, [options]); // ✅ Only changes when createOptions changes
1107+
}, [options]); // ✅ Only changes when options changes
11091108
// ...
11101109
```
11111110

Diff for: ‎src/content/reference/react/useRef.md

+10-12
Original file line numberDiff line numberDiff line change
@@ -448,16 +448,16 @@ button { display: block; margin-bottom: 20px; }
448448
449449
#### Exposing a ref to your own component {/*exposing-a-ref-to-your-own-component*/}
450450
451-
Sometimes, you may want to let the parent component manipulate the DOM inside of your component. For example, maybe you're writing a `MyInput` component, but you want the parent to be able to focus the input (which the parent has no access to). You can use a combination of `useRef` to hold the input and [`forwardRef`](/reference/react/forwardRef) to expose it to the parent component. Read a [detailed walkthrough](/learn/manipulating-the-dom-with-refs#accessing-another-components-dom-nodes) here.
451+
Sometimes, you may want to let the parent component manipulate the DOM inside of your component. For example, maybe you're writing a `MyInput` component, but you want the parent to be able to focus the input (which the parent has no access to). You can create a `ref` in the parent and pass the `ref` as prop to the child component. Read a [detailed walkthrough](/learn/manipulating-the-dom-with-refs#accessing-another-components-dom-nodes) here.
452452
453453
<Sandpack>
454454
455455
```js
456-
import { forwardRef, useRef } from 'react';
456+
import { useRef } from 'react';
457457

458-
const MyInput = forwardRef((props, ref) => {
459-
return <input {...props} ref={ref} />;
460-
});
458+
function MyInput({ ref }) {
459+
return <input ref={ref} />;
460+
};
461461

462462
export default function Form() {
463463
const inputRef = useRef(null);
@@ -554,7 +554,7 @@ You might get an error in the console:
554554
555555
<ConsoleBlock level="error">
556556
557-
Warning: Function components cannot be given refs. Attempts to access this ref will fail. Did you mean to use React.forwardRef()?
557+
TypeError: Cannot read properties of null
558558
559559
</ConsoleBlock>
560560
@@ -573,20 +573,18 @@ export default function MyInput({ value, onChange }) {
573573
}
574574
```
575575
576-
And then wrap it in [`forwardRef`](/reference/react/forwardRef) like this:
577-
578-
```js {3,8}
579-
import { forwardRef } from 'react';
576+
And then add `ref` to the list of props your component accepts and pass `ref` as a prop to the relevent child [built-in component](/reference/react-dom/components/common) like this:
580577
581-
const MyInput = forwardRef(({ value, onChange }, ref) => {
578+
```js {1,6}
579+
function MyInput({ value, onChange, ref }) {
582580
return (
583581
<input
584582
value={value}
585583
onChange={onChange}
586584
ref={ref}
587585
/>
588586
);
589-
});
587+
};
590588

591589
export default MyInput;
592590
```

Diff for: ‎src/content/reference/react/useTransition.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function TabContainer() {
4848

4949
### `startTransition(action)` {/*starttransition*/}
5050

51-
The `startTransition` function returned by `useTransition` lets you mark a updates as a Transition.
51+
The `startTransition` function returned by `useTransition` lets you mark an update as a Transition.
5252

5353
```js {6,8}
5454
function TabContainer() {
@@ -305,12 +305,12 @@ export async function updateQuantity(newQuantity) {
305305

306306
</Sandpack>
307307

308-
This is a basic example to demonstrate how Actions work, but this example does not handle requests completing out of order. When updating the quantity multiple times, it's possible for the previous requests to finish after later requests causing the quantity to update out of order. This is a known limitation that we will fix in the future (see [Troubleshooting](#my-state-updates-in-async-transitions-are-out-of-order) below).
308+
This is a basic example to demonstrate how Actions work, but this example does not handle requests completing out of order. When updating the quantity multiple times, it's possible for the previous requests to finish after later requests causing the quantity to update out of order. This is a known limitation that we will fix in the future (see [Troubleshooting](#my-state-updates-in-transitions-are-out-of-order) below).
309309

310310
For common use cases, React provides built-in abstractions such as:
311311
- [`useActionState`](/reference/react/useActionState)
312312
- [`<form>` actions](/reference/react-dom/components/form)
313-
- [Server Actions](/reference/rsc/server-actions)
313+
- [Server Functions](/reference/rsc/server-functions)
314314

315315
These solutions handle request ordering for you. When using Transitions to build your own custom hooks or libraries that manage async state transitions, you have greater control over the request ordering, but you must handle it yourself.
316316

@@ -340,7 +340,7 @@ Update the quantity multiple times quickly. Notice that the pending "Total" stat
340340
```
341341

342342
```js src/App.js
343-
import { useState, useTransition } from "react";
343+
import { useState } from "react";
344344
import { updateQuantity } from "./api";
345345
import Item from "./Item";
346346
import Total from "./Total";

Diff for: ‎src/content/reference/rsc/server-components.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: Server Components
44

55
<RSC>
66

7-
Sever Components are for use in [React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
7+
Server Components are for use in [React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
88

99
</RSC>
1010

@@ -22,7 +22,7 @@ This separate environment is the "server" in React Server Components. Server Com
2222

2323
#### How do I build support for Server Components? {/*how-do-i-build-support-for-server-components*/}
2424

25-
While React Server Components in React 19 are stable and will not break between major versions, the underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.
25+
While React Server Components in React 19 are stable and will not break between minor versions, the underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.
2626

2727
To support React Server Components as a bundler or framework, we recommend pinning to a specific React version, or using the Canary release. We will continue working with bundlers and frameworks to stabilize the APIs used to implement React Server Components in the future.
2828

Diff for: ‎src/content/reference/rsc/server-functions.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Server Functions allow Client Components to call async functions executed on the
2222

2323
#### How do I build support for Server Functions? {/*how-do-i-build-support-for-server-functions*/}
2424

25-
While Server Functions in React 19 are stable and will not break between major versions, the underlying APIs used to implement Server Functions in a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.
25+
While Server Functions in React 19 are stable and will not break between minor versions, the underlying APIs used to implement Server Functions in a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.
2626

2727
To support Server Functions as a bundler or framework, we recommend pinning to a specific React version, or using the Canary release. We will continue working with bundlers and frameworks to stabilize the APIs used to implement Server Functions in the future.
2828

Diff for: ‎src/content/reference/rsc/use-server.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ titleForTitleTag: "'use server' directive"
2424

2525
### `'use server'` {/*use-server*/}
2626

27-
Add `'use server'` at the top of an async function body to mark the function as callable by the client. We call these functions [_Server Functions_]((/reference/rsc/server-functions)).
27+
Add `'use server'` at the top of an async function body to mark the function as callable by the client. We call these functions [_Server Functions_](/reference/rsc/server-functions).
2828

2929
```js {2}
3030
async function addToCart(data) {

Diff for: ‎src/sidebarBlog.json

+7
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,13 @@
1111
"path": "/blog",
1212
"skipBreadcrumb": true,
1313
"routes": [
14+
{
15+
"title": "React 19",
16+
"titleForHomepage": "React 19",
17+
"icon": "blog",
18+
"date": "December 05, 2024",
19+
"path": "/blog/2024/12/05/react-19"
20+
},
1421
{
1522
"title": "React Compiler Beta Release and Roadmap",
1623
"titleForHomepage": "React Compiler Beta Release and Roadmap",

0 commit comments

Comments
 (0)
Please sign in to comment.