Skip to content

Commit 63f8a5e

Browse files
Merge branch 'reactjs:main' into start-a-new-react-project
2 parents 6a9d6e4 + 663558d commit 63f8a5e

26 files changed

+931
-87
lines changed

Diff for: package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
"check-all": "npm-run-all prettier lint:fix tsc"
2323
},
2424
"dependencies": {
25-
"@codesandbox/sandpack-react": "2.6.0",
25+
"@codesandbox/sandpack-react": "2.13.5",
2626
"@docsearch/css": "3.0.0-alpha.41",
2727
"@docsearch/react": "3.0.0-alpha.41",
2828
"@headlessui/react": "^1.7.0",

Diff for: src/components/MDX/Sandpack/SandpackRoot.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ function SandpackRoot(props: SandpackProps) {
8888
autorun,
8989
initMode: 'user-visible',
9090
initModeObserverOptions: {rootMargin: '1400px 0px'},
91-
bundlerURL: 'https://1e4ad8f7.sandpack-bundler-4bw.pages.dev',
91+
bundlerURL: 'https://786946de.sandpack-bundler-4bw.pages.dev',
9292
logLevel: SandpackLogLevel.None,
9393
}}>
9494
<CustomPreset providedFiles={Object.keys(files)} />

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

+16
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,22 @@ July 17-19, 2024. In-person in Portland, OR, USA
7070

7171
[Website](https://chainreactconf.com) - [Twitter](https://twitter.com/ChainReactConf)
7272

73+
### The Geek Conf 2024 {/*the-geek-conf-2024*/}
74+
July 25, 2024. In-person in Berlin, Germany + remote (hybrid event)
75+
76+
[Website](https://thegeekconf.com) - [Twitter](https://twitter.com/thegeekconf)
77+
78+
### React Universe Conf 2024 {/*react-universe-conf-2024*/}
79+
September 5-6, 2024. Wrocław, Poland.
80+
81+
[Website](https://www.reactuniverseconf.com/) - [Twitter](https://twitter.com/react_native_eu) - [LinkedIn](https://www.linkedin.com/events/reactuniverseconf7163919537074118657/)
82+
83+
### React Alicante 2024 {/*react-alicante-2024*/}
84+
September 19-21, 2024. Alicante, Spain.
85+
86+
[Website](https://reactalicante.es/) - [Twitter](https://twitter.com/ReactAlicante) - [YouTube](https://www.youtube.com/channel/UCaSdUaITU1Cz6PvC97A7e0w)
87+
88+
7389
### React India 2024 {/*react-india-2024*/}
7490
October 17 - 19, 2024. In-person in Goa, India (hybrid event) + Oct 15 2024 - remote day
7591

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ Current members of the React team are listed in alphabetical order below.
2222
Andrey started his career as a designer and then gradually transitioned into web development. After joining the React Data team at Meta he worked on adding an incremental JavaScript compiler to Relay, and then later on, worked on removing the same compiler from Relay. Outside of work, Andrey likes to play music and engage in various sports.
2323
</TeamMember>
2424

25-
<TeamMember name="Dan Abramov" permalink="dan-abramov" photo="/images/team/gaearon.jpg" github="gaearon" twitter="dan_abramov" title="Engineer at Meta">
25+
<TeamMember name="Dan Abramov" permalink="dan-abramov" photo="/images/team/gaearon.jpg" github="gaearon" twitter="dan_abramov2" title="Independent Engineer">
2626
Dan got into programming after he accidentally discovered Visual Basic inside Microsoft PowerPoint. He has found his true calling in turning [Sebastian](#sebastian-markbåge)'s tweets into long-form blog posts. Dan occasionally wins at Fortnite by hiding in a bush until the game ends.
2727
</TeamMember>
2828

Diff for: src/content/learn/choosing-the-state-structure.md

-2
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,6 @@ button { margin-top: 10px; }
554554

555555
</Sandpack>
556556

557-
(Alternatively, you may hold the selected index in state.)
558-
559557
The state used to be duplicated like this:
560558

561559
* `items = [{ id: 0, title: 'pretzels'}, ...]`

Diff for: src/content/learn/rendering-lists.md

+2
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,11 @@ const people = [{
113113
name: 'Mohammad Abdus Salam',
114114
profession: 'physicist',
115115
}, {
116+
id: 3,
116117
name: 'Percy Lavon Julian',
117118
profession: 'chemist',
118119
}, {
120+
id: 4,
119121
name: 'Subrahmanyan Chandrasekhar',
120122
profession: 'astrophysicist',
121123
}];

Diff for: src/content/learn/typescript.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ TypeScript is a popular way to add type definitions to JavaScript codebases. Out
2222

2323
All [production-grade React frameworks](/learn/start-a-new-react-project#production-grade-react-frameworks) offer support for using TypeScript. Follow the framework specific guide for installation:
2424

25-
- [Next.js](https://nextjs.org/docs/pages/building-your-application/configuring/typescript)
25+
- [Next.js](https://nextjs.org/docs/app/building-your-application/configuring/typescript)
2626
- [Remix](https://remix.run/docs/en/1.19.2/guides/typescript)
2727
- [Gatsby](https://www.gatsbyjs.com/docs/how-to/custom-configuration/typescript/)
2828
- [Expo](https://docs.expo.dev/guides/typescript/)
@@ -435,7 +435,7 @@ interface ModalRendererProps {
435435

436436
Note, that you cannot use TypeScript to describe that the children are a certain type of JSX elements, so you cannot use the type-system to describe a component which only accepts `<li>` children.
437437

438-
You can see all an example of both `React.ReactNode` and `React.ReactElement` with the type-checker in [this TypeScript playground](https://www.typescriptlang.org/play?#code/JYWwDg9gTgLgBAJQKYEMDG8BmUIjgIilQ3wChSB6CxYmAOmXRgDkIATJOdNJMGAZzgwAFpxAR+8YADswAVwGkZMJFEzpOjDKw4AFHGEEBvUnDhphwADZsi0gFw0mDWjqQBuUgF9yaCNMlENzgAXjgACjADfkctFnYkfQhDAEpQgD44AB42YAA3dKMo5P46C2tbJGkvLIpcgt9-QLi3AEEwMFCItJDMrPTTbIQ3dKywdIB5aU4kKyQQKpha8drhhIGzLLWODbNs3b3s8YAxKBQAcwXpAThMaGWDvbH0gFloGbmrgQfBzYpd1YjQZbEYARkB6zMwO2SHSAAlZlYIBCdtCRkZpHIrFYahQYQD8UYYFA5EhcfjyGYqHAXnJAsIUHlOOUbHYhMIIHJzsI0Qk4P9SLUBuRqXEXEwAKKfRZcNA8PiCfxWACecAAUgBlAAacFm80W-CU11U6h4TgwUv11yShjgJjMLMqDnN9Dilq+nh8pD8AXgCHdMrCkWisVoAet0R6fXqhWKhjKllZVVxMcavpd4Zg7U6Qaj+2hmdG4zeRF10uu-Aeq0LBfLMEe-V+T2L7zLVu+FBWLdLeq+lc7DYFf39deFVOotMCACNOCh1dq219a+30uC8YWoZsRyuEdjkevR8uvoVMdjyTWt4WiSSydXD4NqZP4AymeZE072ZzuUeZQKheQgA).
438+
You can see an example of both `React.ReactNode` and `React.ReactElement` with the type-checker in [this TypeScript playground](https://www.typescriptlang.org/play?#code/JYWwDg9gTgLgBAJQKYEMDG8BmUIjgIilQ3wChSB6CxYmAOmXRgDkIATJOdNJMGAZzgwAFpxAR+8YADswAVwGkZMJFEzpOjDKw4AFHGEEBvUnDhphwADZsi0gFw0mDWjqQBuUgF9yaCNMlENzgAXjgACjADfkctFnYkfQhDAEpQgD44AB42YAA3dKMo5P46C2tbJGkvLIpcgt9-QLi3AEEwMFCItJDMrPTTbIQ3dKywdIB5aU4kKyQQKpha8drhhIGzLLWODbNs3b3s8YAxKBQAcwXpAThMaGWDvbH0gFloGbmrgQfBzYpd1YjQZbEYARkB6zMwO2SHSAAlZlYIBCdtCRkZpHIrFYahQYQD8UYYFA5EhcfjyGYqHAXnJAsIUHlOOUbHYhMIIHJzsI0Qk4P9SLUBuRqXEXEwAKKfRZcNA8PiCfxWACecAAUgBlAAacFm80W-CU11U6h4TgwUv11yShjgJjMLMqDnN9Dilq+nh8pD8AXgCHdMrCkWisVoAet0R6fXqhWKhjKllZVVxMcavpd4Zg7U6Qaj+2hmdG4zeRF10uu-Aeq0LBfLMEe-V+T2L7zLVu+FBWLdLeq+lc7DYFf39deFVOotMCACNOCh1dq219a+30uC8YWoZsRyuEdjkevR8uvoVMdjyTWt4WiSSydXD4NqZP4AymeZE072ZzuUeZQKheQgA).
439439

440440
### Style Props {/*typing-style-props*/}
441441

@@ -456,7 +456,7 @@ We recommend the following resources:
456456

457457
- [The TypeScript handbook](https://www.typescriptlang.org/docs/handbook/) is the official documentation for TypeScript, and covers most key language features.
458458

459-
- [The TypeScript release notes](https://devblogs.microsoft.com/typescript/) covers a each new features in-depth.
459+
- [The TypeScript release notes](https://devblogs.microsoft.com/typescript/) cover new features in depth.
460460

461461
- [React TypeScript Cheatsheet](https://react-typescript-cheatsheet.netlify.app/) is a community-maintained cheatsheet for using TypeScript with React, covering a lot of useful edge cases and providing more breadth than this document.
462462

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

+4-4
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ Props that are **not recommended** for use with React:
7979

8080
#### Special rendering behavior {/*special-rendering-behavior*/}
8181

82-
React will always place the DOM element corresponding to the `<link>` component within the document’s `<head>`, regardless of where in the React tree it is rendered. The `<head>` is the only valid place for `<link>` to exist within the DOM, yet it’s convenient and keeps things composable if a component representing a specific page can render `<link>` components itself.
82+
React will always place the DOM element corresponding to the `<link>` component within the document’s `<head>`, regardless of where in the React tree it is rendered. The `<head>` is the only valid place for `<link>` to exist within the DOM, yet it’s convenient and keeps things composable if a component representing a specific page can render `<link>` components itself.
8383

8484
There are a few exceptions to this:
8585

@@ -91,7 +91,7 @@ There are a few exceptions to this:
9191

9292
In addition, if the `<link>` is to a stylesheet (namely, it has `rel="stylesheet"` in its props), React treats it specially in the following ways:
9393

94-
* The component that renders `<link>` will [suspend](http://localhost:3000/reference/react/Suspense) while the stylesheet is loading.
94+
* The component that renders `<link>` will [suspend](/reference/react/Suspense) while the stylesheet is loading.
9595
* If multiple components render links to the same stylesheet, React will de-duplicate them and only put a single link into the DOM. Two links are considered the same if they have the same `href` prop.
9696

9797
There are two exception to this special behavior:
@@ -133,7 +133,7 @@ export default function BlogPage() {
133133

134134
### Linking to a stylesheet {/*linking-to-a-stylesheet*/}
135135

136-
If a component depends on a certain stylesheet in order to be displayed correctly, you can render a link to that stylesheet within the component. Your component will [suspend](http://localhost:3000/reference/react/Suspense) while the stylesheet is loading. You must supply the `precedence` prop, which tells React where to place this stylesheet relative to others — stylesheets with higher precedence can override those with lower precedence.
136+
If a component depends on a certain stylesheet in order to be displayed correctly, you can render a link to that stylesheet within the component. Your component will [suspend](/reference/react/Suspense) while the stylesheet is loading. You must supply the `precedence` prop, which tells React where to place this stylesheet relative to others — stylesheets with higher precedence can override those with lower precedence.
137137

138138
<Note>
139139
When you want to use a stylesheet, it can be beneficial to call the [preinit](/reference/react-dom/preinit) function. Calling this function may allow the browser to start fetching the stylesheet earlier than if you just render a `<link>` component, for example by sending an [HTTP Early Hints response](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/103).
@@ -217,7 +217,7 @@ function Component() {
217217

218218
### Annotating specific items within the document with links {/*annotating-specific-items-within-the-document-with-links*/}
219219

220-
You can use the `<link>` component with the `itemProp` prop to annotate specific items within the document with links to related resources. In this case, React will *not* place these annotations within the document `<head>` but will place them like any other React component.
220+
You can use the `<link>` component with the `itemProp` prop to annotate specific items within the document with links to related resources. In this case, React will *not* place these annotations within the document `<head>` but will place them like any other React component.
221221

222222
```js
223223
<section itemScope>

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ Props that are **not recommended** for use with React:
5252

5353
#### Special rendering behavior {/*special-rendering-behavior*/}
5454

55-
React can move `<style>` components to the document's `<head>`, de-duplicate identical stylesheets, and [suspend](http://localhost:3000/reference/react/Suspense) while the stylesheet is loading.
55+
React can move `<style>` components to the document's `<head>`, de-duplicate identical stylesheets, and [suspend](/reference/react/Suspense) while the stylesheet is loading.
5656

5757
To opt into this behavior, provide the `href` and `precedence` props. React will de-duplicate styles if they have the same `href`. The precedence prop tells React where to rank the `<style>` DOM node relative to others in the document `<head>`, which determines which stylesheet can override the other.
5858

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

+28-29
Original file line numberDiff line numberDiff line change
@@ -182,47 +182,32 @@ import {useFormStatus} from 'react-dom';
182182
export default function UsernameForm() {
183183
const {pending, data} = useFormStatus();
184184

185-
const [showSubmitted, setShowSubmitted] = useState(false);
186-
const submittedUsername = useRef(null);
187-
const timeoutId = useRef(null);
188-
189-
useMemo(() => {
190-
if (pending) {
191-
submittedUsername.current = data?.get('username');
192-
if (timeoutId.current != null) {
193-
clearTimeout(timeoutId.current);
194-
}
195-
196-
timeoutId.current = setTimeout(() => {
197-
timeoutId.current = null;
198-
setShowSubmitted(false);
199-
}, 2000);
200-
setShowSubmitted(true);
201-
}
202-
}, [pending, data]);
203-
204185
return (
205-
<>
206-
<label>Request a Username: </label><br />
207-
<input type="text" name="username" />
186+
<div>
187+
<h3>Request a Username: </h3>
188+
<input type="text" name="username" disabled={pending}/>
208189
<button type="submit" disabled={pending}>
209-
{pending ? 'Submitting...' : 'Submit'}
190+
Submit
210191
</button>
211-
{showSubmitted ? (
212-
<p>Submitted request for username: {submittedUsername.current}</p>
213-
) : null}
214-
</>
192+
<br />
193+
<p>{data ? `Requesting ${data?.get("username")}...`: ''}</p>
194+
</div>
215195
);
216196
}
217197
```
218198
219199
```js src/App.js
220200
import UsernameForm from './UsernameForm';
221201
import { submitForm } from "./actions.js";
202+
import {useRef} from 'react';
222203
223204
export default function App() {
205+
const ref = useRef(null);
224206
return (
225-
<form action={submitForm}>
207+
<form ref={ref} action={async (formData) => {
208+
await submitForm(formData);
209+
ref.current.reset();
210+
}}>
226211
<UsernameForm />
227212
</form>
228213
);
@@ -231,8 +216,22 @@ export default function App() {
231216
232217
```js src/actions.js hidden
233218
export async function submitForm(query) {
234-
await new Promise((res) => setTimeout(res, 1000));
219+
await new Promise((res) => setTimeout(res, 2000));
220+
}
221+
```
222+
223+
```css
224+
p {
225+
height: 14px;
226+
padding: 0;
227+
margin: 2px 0 0 0 ;
228+
font-size: 14px
229+
}
230+
231+
button {
232+
margin-left: 2px;
235233
}
234+
236235
```
237236
238237
```json package.json hidden

Diff for: src/content/reference/react-dom/server/renderToNodeStream.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ This API will be removed in a future major version of React. Use [`renderToPipea
1313
`renderToNodeStream` renders a React tree to a [Node.js Readable Stream.](https://nodejs.org/api/stream.html#readable-streams)
1414

1515
```js
16-
const stream = renderToNodeStream(reactNode)
16+
const stream = renderToNodeStream(reactNode, options?)
1717
```
1818
1919
</Intro>
@@ -24,7 +24,7 @@ const stream = renderToNodeStream(reactNode)
2424
2525
## Reference {/*reference*/}
2626
27-
### `renderToNodeStream(reactNode)` {/*rendertonodestream*/}
27+
### `renderToNodeStream(reactNode, options?)` {/*rendertonodestream*/}
2828
2929
On the server, call `renderToNodeStream` to get a [Node.js Readable Stream](https://nodejs.org/api/stream.html#readable-streams) which you can pipe into the response.
3030

Diff for: src/content/reference/react-dom/server/renderToStaticMarkup.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ title: renderToStaticMarkup
77
`renderToStaticMarkup` renders a non-interactive React tree to an HTML string.
88

99
```js
10-
const html = renderToStaticMarkup(reactNode)
10+
const html = renderToStaticMarkup(reactNode, options?)
1111
```
1212
1313
</Intro>
@@ -18,7 +18,7 @@ const html = renderToStaticMarkup(reactNode)
1818
1919
## Reference {/*reference*/}
2020
21-
### `renderToStaticMarkup(reactNode)` {/*rendertostaticmarkup*/}
21+
### `renderToStaticMarkup(reactNode, options?)` {/*rendertostaticmarkup*/}
2222
2323
On the server, call `renderToStaticMarkup` to render your app to HTML.
2424

Diff for: src/content/reference/react-dom/server/renderToStaticNodeStream.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ title: renderToStaticNodeStream
77
`renderToStaticNodeStream` renders a non-interactive React tree to a [Node.js Readable Stream.](https://nodejs.org/api/stream.html#readable-streams)
88

99
```js
10-
const stream = renderToStaticNodeStream(reactNode)
10+
const stream = renderToStaticNodeStream(reactNode, options?)
1111
```
1212
1313
</Intro>
@@ -18,7 +18,7 @@ const stream = renderToStaticNodeStream(reactNode)
1818
1919
## Reference {/*reference*/}
2020
21-
### `renderToStaticNodeStream(reactNode)` {/*rendertostaticnodestream*/}
21+
### `renderToStaticNodeStream(reactNode, options?)` {/*rendertostaticnodestream*/}
2222
2323
On the server, call `renderToStaticNodeStream` to get a [Node.js Readable Stream](https://nodejs.org/api/stream.html#readable-streams).
2424

Diff for: src/content/reference/react-dom/server/renderToString.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ title: renderToString
1313
`renderToString` renders a React tree to an HTML string.
1414

1515
```js
16-
const html = renderToString(reactNode)
16+
const html = renderToString(reactNode, options?)
1717
```
1818
1919
</Intro>
@@ -24,7 +24,7 @@ const html = renderToString(reactNode)
2424
2525
## Reference {/*reference*/}
2626
27-
### `renderToString(reactNode)` {/*rendertostring*/}
27+
### `renderToString(reactNode, options?)` {/*rendertostring*/}
2828
2929
On the server, call `renderToString` to render your app to HTML.
3030

Diff for: src/content/reference/react/StrictMode.md

+12-4
Original file line numberDiff line numberDiff line change
@@ -196,14 +196,16 @@ ul {
196196
margin: 0;
197197
list-style-type: none;
198198
height: 100%;
199+
display: flex;
200+
flex-wrap: wrap;
201+
padding: 10px;
199202
}
200203

201204
li {
202205
border: 1px solid #aaa;
203206
border-radius: 6px;
204207
float: left;
205208
margin: 5px;
206-
margin-bottom: 20px;
207209
padding: 5px;
208210
width: 70px;
209211
height: 100px;
@@ -283,14 +285,16 @@ ul {
283285
margin: 0;
284286
list-style-type: none;
285287
height: 100%;
288+
display: flex;
289+
flex-wrap: wrap;
290+
padding: 10px;
286291
}
287292

288293
li {
289294
border: 1px solid #aaa;
290295
border-radius: 6px;
291296
float: left;
292297
margin: 5px;
293-
margin-bottom: 20px;
294298
padding: 5px;
295299
width: 70px;
296300
height: 100px;
@@ -377,14 +381,16 @@ ul {
377381
margin: 0;
378382
list-style-type: none;
379383
height: 100%;
384+
display: flex;
385+
flex-wrap: wrap;
386+
padding: 10px;
380387
}
381388

382389
li {
383390
border: 1px solid #aaa;
384391
border-radius: 6px;
385392
float: left;
386393
margin: 5px;
387-
margin-bottom: 20px;
388394
padding: 5px;
389395
width: 70px;
390396
height: 100px;
@@ -467,14 +473,16 @@ ul {
467473
margin: 0;
468474
list-style-type: none;
469475
height: 100%;
476+
display: flex;
477+
flex-wrap: wrap;
478+
padding: 10px;
470479
}
471480

472481
li {
473482
border: 1px solid #aaa;
474483
border-radius: 6px;
475484
float: left;
476485
margin: 5px;
477-
margin-bottom: 20px;
478486
padding: 5px;
479487
width: 70px;
480488
height: 100px;

Diff for: src/content/reference/react/index.md

+8
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ React-dom contains features that are only supported for web applications (which
2929
* [Client APIs](/reference/react-dom/client) - The `react-dom/client` APIs let you render React components on the client (in the browser).
3030
* [Server APIs](/reference/react-dom/server) - The `react-dom/server` APIs let you render React components to HTML on the server.
3131

32+
## Rules of React {/*rules-of-react*/}
33+
34+
React has idioms — or rules — for how to express patterns in a way that is easy to understand and yields high-quality applications:
35+
36+
* [Components and Hooks must be pure](/reference/rules/components-and-hooks-must-be-pure) – Purity makes your code easier to understand, debug, and allows React to automatically optimize your components and hooks correctly.
37+
* [React calls Components and Hooks](/reference/rules/react-calls-components-and-hooks) – React is responsible for rendering components and hooks when necessary to optimize the user experience.
38+
* [Rules of Hooks](/reference/rules/rules-of-hooks) – Hooks are defined using JavaScript functions, but they represent a special type of reusable UI logic with restrictions on where they can be called.
39+
3240
## Legacy APIs {/*legacy-apis*/}
3341

3442
* [Legacy APIs](/reference/react/legacy) - Exported from the `react` package, but not recommended for use in newly written code.

0 commit comments

Comments
 (0)