mirror of
https://github.com/zebrajr/react.git
synced 2026-01-15 12:15:22 +00:00
Enable passing Server References from Server to Client (#26124)
This is the first of a series of PRs, that let you pass functions, by reference, to the client and back. E.g. through Server Context. It's like client references but they're opaque on the client and resolved on the server. To do this, for security, you must opt-in to exposing these functions to the client using the `"use server"` directive. The `"use client"` directive lets you enter the client from the server. The `"use server"` directive lets you enter the server from the client. This works by tagging those functions as Server References. We could potentially expand this to other non-serializable or stateful objects too like classes. This only implements server->server CJS imports and server->server ESM imports. We really should add a loader to the webpack plug-in for client->server imports too. I'll leave closures as an exercise for integrators. You can't "call" a client reference on the server, however, you can "call" a server reference on the client. This invokes a callback on the Flight client options called `callServer`. This lets a router implement calling back to the server. Effectively creating an RPC. This is using JSON for serializing those arguments but more utils coming from client->server serialization.
This commit is contained in:
committed by
GitHub
parent
6c75d4e009
commit
ef9f6e77b8
@@ -361,7 +361,7 @@
|
||||
"372": "Cannot call unstable_createEventHandle with \"%s\", as it is not an event known to React.",
|
||||
"373": "This Hook is not supported in Server Components.",
|
||||
"374": "Event handlers cannot be passed to Client Component props.%s\nIf you need interactivity, consider converting part of this to a Client Component.",
|
||||
"375": "Functions cannot be passed directly to Client Components because they're not serializable.%s",
|
||||
"375": "Functions cannot be passed directly to Client Components unless you explicitly expose it by marking it with \"use server\".%s",
|
||||
"376": "Only global symbols received from Symbol.for(...) can be passed to Client Components. The symbol Symbol.for(%s) cannot be found among global symbols.%s",
|
||||
"377": "BigInt (%s) is not yet supported in Client Component props.%s",
|
||||
"378": "Type %s is not supported in Client Component props.%s",
|
||||
@@ -450,5 +450,6 @@
|
||||
"462": "Unexpected SuspendedReason. This is a bug in React.",
|
||||
"463": "ReactDOMServer.renderToNodeStream(): The Node Stream API is not available in Bun. Use ReactDOMServer.renderToReadableStream() instead.",
|
||||
"464": "ReactDOMServer.renderToStaticNodeStream(): The Node Stream API is not available in Bun. Use ReactDOMServer.renderToReadableStream() instead.",
|
||||
"465": "enableFizzExternalRuntime without enableFloat is not supported. This should never appear in production, since it means you are using a misconfigured React bundle."
|
||||
}
|
||||
"465": "enableFizzExternalRuntime without enableFloat is not supported. This should never appear in production, since it means you are using a misconfigured React bundle.",
|
||||
"466": "Trying to call a function from \"use server\" but the callServer option was not implemented in your router runtime."
|
||||
}
|
||||
Reference in New Issue
Block a user