Skip to content

Commit 94df6ad

Browse files
authored
Merge branch 'main' into main
2 parents 7f32657 + cff8961 commit 94df6ad

35 files changed

+400
-236
lines changed

.github/workflows/analyze.yml

+16-8
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,26 @@ jobs:
1111
analyze:
1212
runs-on: ubuntu-latest
1313
steps:
14-
- uses: actions/checkout@v3
14+
- uses: actions/checkout@v4
1515

1616
- name: Set up node
17-
uses: actions/setup-node@v3
17+
uses: actions/setup-node@v4
1818
with:
1919
node-version: '20.x'
20+
cache: yarn
21+
cache-dependency-path: yarn.lock
2022

21-
- name: Install dependencies
22-
uses: bahmutov/[email protected]
23+
- name: Restore cached node_modules
24+
uses: actions/cache@v4
25+
with:
26+
path: "**/node_modules"
27+
key: node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
28+
29+
- name: Install deps
30+
run: yarn install --frozen-lockfile
2331

2432
- name: Restore next build
25-
uses: actions/cache@v3
33+
uses: actions/cache@v4
2634
id: restore-build-cache
2735
env:
2836
cache-name: cache-next-build
@@ -41,7 +49,7 @@ jobs:
4149
run: npx -p [email protected] report
4250

4351
- name: Upload bundle
44-
uses: actions/upload-artifact@v3
52+
uses: actions/upload-artifact@v4
4553
with:
4654
path: .next/analyze/__bundle_analysis.json
4755
name: bundle_analysis.json
@@ -73,7 +81,7 @@ jobs:
7381
run: ls -laR .next/analyze/base && npx -p nextjs-bundle-analysis compare
7482

7583
- name: Upload analysis comment
76-
uses: actions/upload-artifact@v3
84+
uses: actions/upload-artifact@v4
7785
with:
7886
name: analysis_comment.txt
7987
path: .next/analyze/__bundle_analysis_comment.txt
@@ -82,7 +90,7 @@ jobs:
8290
run: echo ${{ github.event.number }} > ./pr_number
8391

8492
- name: Upload PR number
85-
uses: actions/upload-artifact@v3
93+
uses: actions/upload-artifact@v4
8694
with:
8795
name: pr_number
8896
path: ./pr_number

.github/workflows/site_lint.yml

+12-4
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,22 @@ jobs:
1414
name: Lint on node 20.x and ubuntu-latest
1515

1616
steps:
17-
- uses: actions/checkout@v1
17+
- uses: actions/checkout@v4
1818
- name: Use Node.js 20.x
19-
uses: actions/setup-node@v3
19+
uses: actions/setup-node@v4
2020
with:
2121
node-version: 20.x
22+
cache: yarn
23+
cache-dependency-path: yarn.lock
2224

23-
- name: Install deps and build (with cache)
24-
uses: bahmutov/[email protected]
25+
- name: Restore cached node_modules
26+
uses: actions/cache@v4
27+
with:
28+
path: "**/node_modules"
29+
key: node_modules-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
30+
31+
- name: Install deps
32+
run: yarn install --frozen-lockfile
2533

2634
- name: Lint codebase
2735
run: yarn ci-check

public/.well-known/atproto-did

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
did:plc:uorpbnp2q32vuvyeruwauyhe
67.2 KB
Loading
68.4 KB
Loading
67.1 KB
Loading
67.7 KB
Loading

src/components/Icon/IconBsky.tsx

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/*
2+
* Copyright (c) Facebook, Inc. and its affiliates.
3+
*/
4+
5+
import {memo} from 'react';
6+
7+
export const IconBsky = memo<JSX.IntrinsicElements['svg']>(function IconBsky(
8+
props
9+
) {
10+
return (
11+
<svg
12+
aria-label="Bluesky"
13+
viewBox="0 0 16 16"
14+
height="1.25em"
15+
width="1.25em"
16+
fill="currentColor"
17+
xmlns="http://www.w3.org/2000/svg"
18+
{...props}>
19+
<path
20+
className="x19hqcy"
21+
d="M3.468 1.948C5.303 3.325 7.276 6.118 8 7.616c.725-1.498 2.697-4.29 4.532-5.668C13.855.955 16 .186 16 2.632c0 .489-.28 4.105-.444 4.692-.572 2.04-2.653 2.561-4.504 2.246 3.236.551 4.06 2.375 2.281 4.2-3.376 3.464-4.852-.87-5.23-1.98-.07-.204-.103-.3-.103-.218 0-.081-.033.014-.102.218-.379 1.11-1.855 5.444-5.231 1.98-1.778-1.825-.955-3.65 2.28-4.2-1.85.315-3.932-.205-4.503-2.246C.28 6.737 0 3.12 0 2.632 0 .186 2.145.955 3.468 1.948Z"></path>
22+
</svg>
23+
);
24+
});

src/components/Layout/Footer.tsx

+7
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import cn from 'classnames';
88
import {ExternalLink} from 'components/ExternalLink';
99
import {IconFacebookCircle} from 'components/Icon/IconFacebookCircle';
1010
import {IconTwitter} from 'components/Icon/IconTwitter';
11+
import {IconBsky} from 'components/Icon/IconBsky';
1112
import {IconGitHub} from 'components/Icon/IconGitHub';
1213

1314
export function Footer() {
@@ -374,6 +375,12 @@ export function Footer() {
374375
className={socialLinkClasses}>
375376
<IconTwitter />
376377
</ExternalLink>
378+
<ExternalLink
379+
aria-label="React on Bluesky"
380+
href="https://bsky.app/profile/react.dev"
381+
className={socialLinkClasses}>
382+
<IconBsky />
383+
</ExternalLink>
377384
<ExternalLink
378385
aria-label="React on Github"
379386
href="https://github.com/facebook/react"

src/components/MDX/Diagram.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ interface DiagramProps {
1515

1616
function Caption({text}: {text: string}) {
1717
return (
18-
<div className="w-full table">
19-
<figcaption className="p-1 sm:p-2 mt-0 sm:mt-0 text-gray-40 text-base lg:text-lg text-center leading-tight table-caption">
18+
<div className="w-full flex justify-center">
19+
<figcaption className="p-1 sm:p-2 mt-0 sm:mt-0 text-gray-40 text-base lg:text-lg text-center leading-tight table-caption max-w-lg">
2020
{text}
2121
</figcaption>
2222
</div>

src/components/MDX/Sandpack/Preview.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ export function Preview({
113113
/**
114114
* The spinner component transition might be longer than
115115
* the bundler loading, so we only show the spinner if
116-
* it takes more than 1s to load the bundler.
116+
* it takes more than 500s to load the bundler.
117117
*/
118118
timeout = setTimeout(() => {
119119
setShowLoading(true);

src/components/MDX/TeamMember.tsx

+17-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as React from 'react';
66
import Image from 'next/image';
77
import {IconTwitter} from '../Icon/IconTwitter';
88
import {IconThreads} from '../Icon/IconThreads';
9+
import {IconBsky} from '../Icon/IconBsky';
910
import {IconGitHub} from '../Icon/IconGitHub';
1011
import {ExternalLink} from '../ExternalLink';
1112
import {H3} from './Heading';
@@ -19,6 +20,7 @@ interface TeamMemberProps {
1920
photo: string;
2021
twitter?: string;
2122
threads?: string;
23+
bsky?: string;
2224
github?: string;
2325
personal?: string;
2426
}
@@ -33,6 +35,7 @@ export function TeamMember({
3335
github,
3436
twitter,
3537
threads,
38+
bsky,
3639
personal,
3740
}: TeamMemberProps) {
3841
if (name == null || title == null || permalink == null || children == null) {
@@ -62,11 +65,11 @@ export function TeamMember({
6265
</H3>
6366
{title && <div>{title}</div>}
6467
{children}
65-
<div className="sm:flex sm:flex-row flex-wrap">
68+
<div className="sm:flex sm:flex-row flex-wrap text-secondary dark:text-secondary-dark">
6669
{twitter && (
6770
<div className="me-4">
6871
<ExternalLink
69-
aria-label="React on Twitter"
72+
aria-label={`${name} on Twitter`}
7073
href={`https://twitter.com/${twitter}`}
7174
className="hover:text-primary hover:underline dark:text-primary-dark flex flex-row items-center">
7275
<IconTwitter className="pe-1" />
@@ -77,14 +80,25 @@ export function TeamMember({
7780
{threads && (
7881
<div className="me-4">
7982
<ExternalLink
80-
aria-label="React on Threads"
83+
aria-label={`${name} on Threads`}
8184
href={`https://threads.net/${threads}`}
8285
className="hover:text-primary hover:underline dark:text-primary-dark flex flex-row items-center">
8386
<IconThreads className="pe-1" />
8487
{threads}
8588
</ExternalLink>
8689
</div>
8790
)}
91+
{bsky && (
92+
<div className="me-4">
93+
<ExternalLink
94+
aria-label={`${name} on Bluesky`}
95+
href={`https://bsky.app/profile/${bsky}`}
96+
className="hover:text-primary hover:underline dark:text-primary-dark flex flex-row items-center">
97+
<IconBsky className="pe-1" />
98+
{bsky}
99+
</ExternalLink>
100+
</div>
101+
)}
88102
{github && (
89103
<div className="me-4">
90104
<ExternalLink

src/content/blog/2024/04/25/react-19-upgrade-guide.md

+20-2
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ npm install react-shallow-renderer --save-dev
353353

354354
##### Please reconsider shallow rendering {/*please-reconsider-shallow-rendering*/}
355355

356-
Shallow rendering depends on React internals and can block you from future upgrades. We recommend migrating your tests to [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) or [@testing-library/react-native](https://callstack.github.io/react-native-testing-library/docs/getting-started).
356+
Shallow rendering depends on React internals and can block you from future upgrades. We recommend migrating your tests to [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) or [@testing-library/react-native](https://testing-library.com/docs/react-native-testing-library/intro).
357357

358358
</Note>
359359

@@ -524,7 +524,7 @@ We are deprecating `react-test-renderer` because it implements its own renderer
524524

525525
The test renderer was created before there were more viable testing strategies available like [React Testing Library](https://testing-library.com), and we now recommend using a modern testing library instead.
526526

527-
In React 19, `react-test-renderer` logs a deprecation warning, and has switched to concurrent rendering. We recommend migrating your tests to [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) or [@testing-library/react-native](https://callstack.github.io/react-native-testing-library/docs/getting-started) for a modern and well supported testing experience.
527+
In React 19, `react-test-renderer` logs a deprecation warning, and has switched to concurrent rendering. We recommend migrating your tests to [@testing-library/react](https://testing-library.com/docs/react-testing-library/intro/) or [@testing-library/react-native](https://testing-library.com/docs/react-native-testing-library/intro) for a modern and well supported testing experience.
528528

529529
## Notable changes {/*notable-changes*/}
530530

@@ -536,6 +536,24 @@ When double rendering in Strict Mode in development, `useMemo` and `useCallback`
536536

537537
As with all Strict Mode behaviors, these features are designed to proactively surface bugs in your components during development so you can fix them before they are shipped to production. For example, during development, Strict Mode will double-invoke ref callback functions on initial mount, to simulate what happens when a mounted component is replaced by a Suspense fallback.
538538

539+
### Improvements to Suspense {/*improvements-to-suspense*/}
540+
541+
In React 19, when a component suspends, React will immediately commit the fallback of the nearest Suspense boundary without waiting for the entire sibling tree to render. After the fallback commits, React schedules another render for the suspended siblings to "pre-warm" lazy requests in the rest of the tree:
542+
543+
<Diagram name="prerender" height={162} width={1270} alt="Diagram showing a tree of three components, one parent labeled Accordion and two children labeled Panel. Both Panel components contain isActive with value false.">
544+
545+
Previously, when a component suspended, the suspended siblings were rendered and then the fallback was committed.
546+
547+
</Diagram>
548+
549+
<Diagram name="prewarm" height={162} width={1270} alt="The same diagram as the previous, with the isActive of the first child Panel component highlighted indicating a click with the isActive value set to true. The second Panel component still contains value false." >
550+
551+
In React 19, when a component suspends, the fallback is committed and then the suspended siblings are rendered.
552+
553+
</Diagram>
554+
555+
This change means Suspense fallbacks display faster, while still warming lazy requests in the suspended tree.
556+
539557
### UMD builds removed {/*umd-builds-removed*/}
540558

541559
UMD was widely used in the past as a convenient way to load React without a build step. Now, there are modern alternatives for loading modules as scripts in HTML documents. Starting with React 19, React will no longer produce UMD builds to reduce the complexity of its testing and release process.

0 commit comments

Comments
 (0)