Skip to content

Commit ee79b7a

Browse files
React router fixes and production server fixes (#270)
1 parent 5651aa5 commit ee79b7a

37 files changed

Lines changed: 320 additions & 371 deletions

.github/frameworks.json

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,7 @@
8888
"package": "app-mastro",
8989
"buildScript": "build",
9090
"buildOutputDir": "generated",
91-
"measurements": [
92-
{
93-
"type": "ssrRequestThroughput"
94-
}
95-
]
91+
"measurements": []
9692
}
9793
},
9894
{

.github/workflows/measure-framework.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -280,8 +280,6 @@ jobs:
280280
- name: Build app
281281
working-directory: ./packages/${{ matrix.framework.package }}
282282
run: pnpm build
283-
env:
284-
BUILD_MODE: spa
285283

286284
- name: Run client-side rendered benchmark
287285
run: pnpm --filter @framework-tracker/stats-generator run:client-side-rendered ${{ matrix.framework.package }}

.github/workflows/validate-stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
5353
echo "=== Running SSR request throughput benchmarks ==="
5454
FRAMEWORKS=$(cat .github/frameworks.json)
55-
echo "$FRAMEWORKS" | jq -c '.[] | select(.app)' | while read -r framework; do
55+
echo "$FRAMEWORKS" | jq -c '.[] | select(.app) | select(.app.measurements | map(.type) | contains(["ssrRequestThroughput"]))' | while read -r framework; do
5656
PKG=$(echo "$framework" | jq -r '.app.package')
5757
echo "Building $PKG..."
5858
(cd packages/$PKG && pnpm build)
@@ -97,7 +97,7 @@ jobs:
9797
echo "$FRAMEWORKS" | jq -c '.[] | select(.app) | select(.app.measurements | map(.type) | contains(["clientSideRendered"]))' | while read -r framework; do
9898
PKG=$(echo "$framework" | jq -r '.app.package')
9999
echo "Building client-side rendered app for $PKG..."
100-
(cd packages/$PKG && BUILD_MODE=spa pnpm build)
100+
(cd packages/$PKG && pnpm build)
101101
echo "Running client-side rendered benchmark for $PKG..."
102102
pnpm --filter @framework-tracker/stats-generator run:client-side-rendered $PKG
103103
done

packages/app-astro/astro.config.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import react from '@astrojs/react'
55
export default defineConfig({
66
output: 'server',
77
adapter: node({
8-
mode: 'middleware',
8+
mode: 'standalone',
99
}),
1010
integrations: [react()],
1111
})

packages/app-nuxt/nuxt.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ export default defineNuxtConfig({
44
compatibilityVersion: 4,
55
},
66
nitro: {
7-
preset: 'node',
7+
preset: 'node-server',
88
},
99
routeRules: {
1010
'/client-side-rendered': { ssr: false },
Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,9 @@
11
import { type RouteConfig, index, route } from '@react-router/dev/routes'
22

3-
const isClientSideRendered = process.env.BUILD_MODE === 'spa'
4-
53
export default [
6-
...(isClientSideRendered ? [] : [index('routes/home.tsx')]),
4+
index('routes/home.tsx'),
75
route('/client-side-rendered', 'routes/client-side-rendered.tsx'),
86
route('/client-side-rendered/:id', 'routes/client-side-rendered.detail.tsx'),
9-
...(isClientSideRendered
10-
? []
11-
: [
12-
route('/server-side-rendered', 'routes/server-side-rendered.tsx'),
13-
route(
14-
'/server-side-rendered/:id',
15-
'routes/server-side-rendered.detail.tsx',
16-
),
17-
]),
7+
route('/server-side-rendered', 'routes/server-side-rendered.tsx'),
8+
route('/server-side-rendered/:id', 'routes/server-side-rendered.detail.tsx'),
189
] satisfies RouteConfig
Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
1-
import { useParams } from 'react-router'
1+
import type { Route } from './+types/client-side-rendered.detail'
22

3-
export default function ClientSideRenderedDetailPage() {
4-
const { id } = useParams()
3+
export async function clientLoader({ params }: Route.ClientLoaderArgs) {
4+
return { id: params.id }
5+
}
6+
7+
clientLoader.hydrate = true as const
8+
9+
export function HydrateFallback() {
10+
return null
11+
}
512

6-
return <p id="detail-id">{id}</p>
13+
export default function ClientSideRenderedDetailPage({
14+
loaderData,
15+
}: Route.ComponentProps) {
16+
return <p id="detail-id">{loaderData.id}</p>
717
}

packages/app-react-router/app/routes/client-side-rendered.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { useState } from 'react'
21
import { Link } from 'react-router'
2+
import type { Route } from './+types/client-side-rendered'
33

44
type Entry = { id: string; name: string }
55

@@ -10,13 +10,23 @@ function generateData(): Entry[] {
1010
}))
1111
}
1212

13-
export default function ClientSideRenderedPage() {
14-
const [entries] = useState(generateData)
13+
export async function clientLoader() {
14+
return { data: generateData() }
15+
}
16+
17+
clientLoader.hydrate = true as const
18+
19+
export function HydrateFallback() {
20+
return null
21+
}
1522

23+
export default function ClientSideRenderedPage({
24+
loaderData,
25+
}: Route.ComponentProps) {
1626
return (
1727
<table>
1828
<tbody>
19-
{entries.map((entry) => (
29+
{loaderData.data.map((entry) => (
2030
<tr key={entry.id}>
2131
<td>{entry.id}</td>
2232
<td>{entry.name}</td>

packages/app-react-router/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"scripts": {
66
"dev": "react-router dev",
77
"build": "react-router build",
8-
"start": "react-router-serve ./build/server/index.js"
8+
"start": "react-router-serve ./build/server/index.js",
9+
"type-check": "react-router typegen && tsc"
910
},
1011
"dependencies": {
1112
"@react-router/node": "7.10.1",
@@ -20,6 +21,7 @@
2021
"@types/node": "22",
2122
"@types/react": "19.2.7",
2223
"@types/react-dom": "19.2.3",
24+
"typescript": "5.9.3",
2325
"vite": "7.3.0"
2426
}
2527
}

packages/app-react-router/pnpm-lock.yaml

Lines changed: 31 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)