Skip to content

Commit 85db7d6

Browse files
committed
support react 18
1 parent 9704163 commit 85db7d6

File tree

10 files changed

+25
-63
lines changed

10 files changed

+25
-63
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,9 @@
115115
"pretty-bytes": "5.3.0",
116116
"pretty-ms": "7.0.0",
117117
"react": "17.0.2",
118-
"react-18": "npm:react@18",
118+
"react-18": "npm:react@18.0.0-alpha-e6be2d531",
119119
"react-dom": "17.0.2",
120-
"react-dom-18": "npm:react-dom@18",
120+
"react-dom-18": "npm:react-dom@18.0.0-alpha-e6be2d531",
121121
"react-ssr-prepass": "1.0.8",
122122
"release": "6.3.0",
123123
"request-promise-core": "1.1.2",

packages/next/client/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,8 +516,8 @@ function renderReactElement(
516516
reactRoot = ReactDOM18.createRoot(domEl, { hydrate: shouldHydrate })
517517
reactRoot.render(reactEl)
518518
}
519-
shouldHydrate = false
520519
}
520+
shouldHydrate = false
521521
} else {
522522
// The check for `.hydrate` is there to support React alternatives like preact
523523
if (shouldHydrate) {
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module.exports = {
2+
webpack(config) {
3+
const { alias } = config.resolve
4+
// FIXME: resolving react/jsx-runtime https://github.com/facebook/react/issues/20235
5+
alias['react/jsx-dev-runtime'] = require.resolve('react/jsx-dev-runtime.js')
6+
alias['react/jsx-runtime'] = require.resolve('react/jsx-runtime.js')
7+
8+
// Use react 18
9+
alias['react'] = require.resolve('react-18')
10+
alias['react-dom'] = require.resolve('react-dom-18')
11+
12+
return config
13+
},
14+
}

test/integration/react-18/prerelease/node_modules/react-dom/index.js

Lines changed: 0 additions & 38 deletions
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{
22
"dependencies": {
3+
"react": "*",
34
"react-dom": "*"
45
}
56
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
export default function Index() {
2+
if (typeof window !== 'undefined') {
3+
window.didHydrate = true
4+
}
25
return <p>Hello</p>
36
}

test/integration/react-18/supported/next.config.js

Lines changed: 0 additions & 5 deletions
This file was deleted.
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
export default function Index() {
2-
if (typeof window !== 'undefined') {
3-
window.didHydrate = true
4-
}
5-
return 'details'
62
return <p>Hello</p>
73
}

test/integration/react-18/test/index.test.js

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -82,19 +82,10 @@ describe('React 18 Support', () => {
8282
let app
8383
let appPort
8484
beforeAll(async () => {
85-
jest.mock('react', () => {
86-
return jest.requireActual('react-18')
87-
})
88-
jest.mock('react-dom', () => {
89-
return jest.requireActual('react-dom-18')
90-
})
9185
await fs.remove(join(appDir, '.next'))
92-
const { stderr } = await nextBuild(appDir, [dirPrerelease], {
93-
stderr: true,
94-
})
95-
console.error(stderr)
86+
await nextBuild(appDir, [dirPrerelease])
9687
appPort = await findPort()
97-
app = await nextStart(appDir, appPort, { stderr: true })
88+
app = await nextStart(appDir, appPort)
9889
})
9990
afterAll(async () => await killApp(app))
10091
it('hydrates correctly for normal page', async () => {

yarn.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15632,15 +15632,15 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7, rc@^1.2.8:
1563215632
minimist "^1.2.0"
1563315633
strip-json-comments "~2.0.1"
1563415634

15635-
"react-18@npm:react@18":
15635+
"react-18@npm:react@18.0.0-alpha-e6be2d531":
1563615636
version "18.0.0-alpha-e6be2d531"
1563715637
resolved "https://registry.yarnpkg.com/react/-/react-18.0.0-alpha-e6be2d531.tgz#c5cf6d5706f7b6411d36848b483a7937c94fc5c9"
1563815638
integrity sha512-roZmm4MYfuGN65PiagPvhumBb3Da1FAgyj6Ti2sHwQDIxhi40PMq5V90gBSKXl7qXbaXHrtpuAtG5R+XkqpDYA==
1563915639
dependencies:
1564015640
loose-envify "^1.1.0"
1564115641
object-assign "^4.1.1"
1564215642

15643-
"react-dom-18@npm:react-dom@18":
15643+
"react-dom-18@npm:react-dom@18.0.0-alpha-e6be2d531":
1564415644
version "18.0.0-alpha-e6be2d531"
1564515645
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.0.0-alpha-e6be2d531.tgz#89b1aef488a56ceac7cc0169ae02d7fbb58cbbb6"
1564615646
integrity sha512-mMGiX/kyhxaUTRDt+Q5oIbpU6cPvO8Sp/kHz3cdNFviwVTHHF2YrnnD70BD2F1R0b7wAdfVVit9EfE+Rqt0sJA==

0 commit comments

Comments
 (0)