Skip to content

Commit 03dd759

Browse files
docs: say what changes instead of re-render in Solid's own sense
Rows are recreated, lists are rebuilt, nothing updates; the server renders the page again after a no-JavaScript post. The Lists heading and its reference links change together. Also restores the extractor's formatting on three reference pages that prettier had touched. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent bfba00c commit 03dd759

15 files changed

Lines changed: 146 additions & 174 deletions

File tree

scripts/extract-solid-ref.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1778,8 +1778,8 @@ const LIST_PROBLEMS = {
17781778
"/guides/lists#a-row-shows-the-wrong-index-after-reordering",
17791779
],
17801780
wholeList: [
1781-
"Editing one item re-renders the whole list",
1782-
"/guides/lists#editing-one-item-re-renders-the-whole-list",
1781+
"Editing one item rebuilds the whole list",
1782+
"/guides/lists#editing-one-item-rebuilds-the-whole-list",
17831783
],
17841784
pushNothing: [
17851785
"`items.push(item)` does nothing",

src/routes/(2)concepts/(3)async-reactivity.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ A loading boundary does not consume errors, and an error boundary does not repla
408408

409409
An error is a status of that part of the graph, not a terminal state.
410410
When the data underneath changes, because an input signal changed or a `refresh` landed, the boundary retries and the content returns.
411-
`reset` retries the failed sources rather than re-rendering the same error.
411+
`reset` retries the failed sources rather than showing the same error again.
412412
[Boundaries](/concepts/boundaries) covers placement and recovery in detail.
413413

414414
## Read every input before the first `await`

src/routes/(2)concepts/(5)mutations.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Three things were added:
103103
The optimistic write is an overlay on the durable store, not a second copy of the state.
104104
Solid discards the overlay when the action settles, whether the action succeeded or failed.
105105
If `api.add` throws, the overlay is dropped and the list is back where it started; there is no rollback code to write.
106-
If the server agrees with the prediction, reconciliation finds no differences and nothing re-renders.
106+
If the server agrees with the prediction, reconciliation finds no differences and nothing updates.
107107

108108
Because actions ride the same hold as reads, the list never shows half a mutation, and quick repeated clicks do not interleave into a corrupted list.
109109

src/routes/(3)building-apps/(3)server-functions/(5)progressive-enhancement.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ Before hydration, the `Avoid` version has no handler attached, so the click does
7171

7272
Everything the hydrated page does with a submission is a layer over that post.
7373
Once the router is running it intercepts the submit, calls the same function over the server-function transport, sets `aria-busy` on the form while the call runs, records the result in `useSubmissions`, and runs any `.onSubmit` hook before the call is sent, which is where an [optimistic write](/routing/solid-router/data#before-the-server-confirms) goes.
74-
None of that changes the HTML or the server function, so a shopper whose bundle has not arrived gets the post and the re-render, and a shopper whose bundle has arrived gets the same result painted before the server answers.
74+
None of that changes the HTML or the server function, so a shopper whose bundle has not arrived gets the post and a fresh page, and a shopper whose bundle has arrived gets the same result painted before the server answers.
7575

7676
The [Forms guide](/guides/forms) builds the checkout address form on this shape, with validation messages, pending state, and an address list that updates before the server confirms.
7777

src/routes/(4)routing/(1)solid-router/(5)data.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ When the action finishes, the `reload` revalidates `getCart`, the store reconcil
363363
Registering `.onSubmit` inside a component ties the hook to that component's lifetime.
364364

365365
The form did not change to get this.
366-
Before hydration it is the same `POST` as in [Mutate with actions](#mutate-with-actions): the browser submits, the server runs `addToCart`, and the page re-renders with the cart from the database.
366+
Before hydration it is the same `POST` as in [Mutate with actions](#mutate-with-actions): the browser submits, the server runs `addToCart`, and the server renders the page again with the cart from the database.
367367
After hydration the router intercepts the submit, runs the `.onSubmit` hooks as the first step of the action's transaction, sends the call, and reconciles the revalidated data over the prediction.
368368
The optimistic layer is something the hydrated page adds on top of a form that already works; the server function and the HTML are the same in both cases.
369369

src/routes/(5)guides/(10)debugging-reactivity.mdx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ Return the same reference when nothing changed, keep the data in a store, or pas
188188

189189
### A write replaces an object that did not change
190190

191-
`setItems(await fetchItems())` replaces every item with a new object, so every row that reads an item re-renders.
191+
`setItems(await fetchItems())` replaces every item with a new object, so every row that reads an item is recreated.
192192
Use a store with `reconcile` to merge the new data into the existing objects, so only the properties that changed notify their readers.
193193
See [Stores](/concepts/stores).
194194

@@ -320,7 +320,7 @@ Server render is pure: state changes flow from async sources (promises, async it
320320
```
321321

322322
A server render is one pass from inputs to HTML.
323-
A setter called during that pass lands as inert data and nothing re-renders, so the write is a sign the code expects a client-side update loop that does not exist on the server.
323+
A setter called during that pass lands as inert data and nothing updates, so the write is a sign the code expects a client-side update loop that does not exist on the server.
324324
The fix depends on what the write was for:
325325

326326
- Bridging a subscription or a promise into a signal: make the source itself the value, `createSignal(() => source)` or `createStore(async () => ..., seed)`, so both server and client read it the same way.

src/routes/(5)guides/(4)forms.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ Use `throw respond(value, { status })` for structured failures.
471471
- Read failures from `useSubmissions(action)`, where the envelope's value is `submission.error`.
472472
- Style the pending state from `form[aria-busy]`; the router sets and clears the attribute.
473473
- Push the submitted fields into a `createOptimisticStore` from the action's `.onSubmit` hook to show the result at once; the overlay is discarded when the action settles and the revalidated list replaces it.
474-
- Every layer after pass 1 exists only on the hydrated page; the same form still posts and re-renders without JavaScript.
474+
- Every layer after pass 1 exists only on the hydrated page; the same form still posts, and the server renders the page again, without JavaScript.
475475

476476
## Next steps
477477

src/routes/(5)guides/(5)lists.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ Key by a field or load into a store; see [Keep row identity across updates](#kee
295295
The callback captured `index()` once instead of reading it in JSX.
296296
Read `index()` inside the JSX expression so it stays reactive, or use `keyed={false}` when the row should be bound to its position rather than its item.
297297

298-
### Editing one item re-renders the whole list
298+
### Editing one item rebuilds the whole list
299299

300300
The list is an array of plain objects in a signal, and the edit replaced the array or the object.
301301
Move the list into a store and mutate the draft.

src/routes/(5)guides/(8)ssr-safe-code.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ A `const` at the top of a file is evaluated once when the server entry loads and
8181

8282
:::caution[A setter called during a server render lands as inert data]
8383
A server render is one pass from inputs to HTML.
84-
Calling `setOpen(true)` in the component body on the server does not re-render anything, and development prints a `[SERVER_WRITE]` warning the first time it happens.
84+
Calling `setOpen(true)` in the component body on the server updates nothing, and development prints a `[SERVER_WRITE]` warning the first time it happens.
8585
[A write on the server did nothing](/guides/debugging-reactivity#a-write-on-the-server-did-nothing) explains the warning and what the write should have been.
8686
:::
8787

src/routes/reference/(1)solid-js/(2)stores/create-store.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ an `ssrSource` field
138138
## Common problems
139139

140140
- [`items.push(item)` does nothing](/guides/lists#itemspushitem-does-nothing)
141-
- [Editing one item re-renders the whole list](/guides/lists#editing-one-item-re-renders-the-whole-list)
141+
- [Editing one item rebuilds the whole list](/guides/lists#editing-one-item-rebuilds-the-whole-list)
142142
- [Something does not update](/guides/debugging-reactivity#something-does-not-update)
143143

144144
## Learn more

0 commit comments

Comments
 (0)