Umgebungsfunktionen sind Dienstprogramme, die entwickelt wurden, um die Ausführung von Funktionen basierend auf der Laufzeitumgebung zu definieren und zu steuern – ob der Code auf dem Client oder auf dem Server ausgeführt wird. Diese Dienstprogramme helfen sicherzustellen, dass umgebungsspezifische Logik sicher und absichtlich ausgeführt wird, wodurch Laufzeitfehler vermieden und die Wartbarkeit in Fullstack- oder isomorphen Anwendungen verbessert wird.
Start stellt drei Kernumgebungsfunktionen zur Verfügung
Verwenden Sie createIsomorphicFn(), um Funktionen zu definieren, die sich je nach Aufruf auf dem Client oder dem Server unterschiedlich verhalten. Dies ist nützlich, um Logik sicher über Umgebungen hinweg zu teilen und umgebungsspezifisches Verhalten an geeignete Handler zu delegieren.
import { createIsomorphicFn } from '@tanstack/react-start'
const getEnv = createIsomorphicFn()
.server(() => 'server')
.client(() => 'client')
const env = getEnv()
// ℹ️ On the **server**, it returns `'server'`.
// ℹ️ On the **client**, it returns `'client'`.
import { createIsomorphicFn } from '@tanstack/react-start'
const getEnv = createIsomorphicFn()
.server(() => 'server')
.client(() => 'client')
const env = getEnv()
// ℹ️ On the **server**, it returns `'server'`.
// ℹ️ On the **client**, it returns `'client'`.
Hier ist ein Beispiel für createIsomorphicFn() mit nur Serverimplementierung
import { createIsomorphicFn } from '@tanstack/react-start'
const serverImplementationOnly = createIsomorphicFn().server(() => 'server')
const server = serverImplementationOnly()
// ℹ️ On the **server**, it returns `'server'`.
// ℹ️ On the **client**, it is no-op (returns `undefined`)
import { createIsomorphicFn } from '@tanstack/react-start'
const serverImplementationOnly = createIsomorphicFn().server(() => 'server')
const server = serverImplementationOnly()
// ℹ️ On the **server**, it returns `'server'`.
// ℹ️ On the **client**, it is no-op (returns `undefined`)
Hier ist ein Beispiel für createIsomorphicFn() mit nur Clientimplementierung
import { createIsomorphicFn } from '@tanstack/react-start'
const clientImplementationOnly = createIsomorphicFn().client(() => 'client')
const client = clientImplementationOnly()
// ℹ️ On the **server**, it is no-op (returns `undefined`)
// ℹ️ On the **client**, it returns `'client'`.
import { createIsomorphicFn } from '@tanstack/react-start'
const clientImplementationOnly = createIsomorphicFn().client(() => 'client')
const client = clientImplementationOnly()
// ℹ️ On the **server**, it is no-op (returns `undefined`)
// ℹ️ On the **client**, it returns `'client'`.
Hier ist ein Beispiel für createIsomorphicFn() ohne umgebungsspezifische Implementierung
import { createIsomorphicFn } from '@tanstack/react-start'
const noImplementation = createIsomorphicFn()
const noop = noImplementation()
// ℹ️ On both **client** and **server**, it is no-op (returns `undefined`)
import { createIsomorphicFn } from '@tanstack/react-start'
const noImplementation = createIsomorphicFn()
const noop = noImplementation()
// ℹ️ On both **client** and **server**, it is no-op (returns `undefined`)
Ein No-Op (Kurzform für "no operation") ist eine Funktion, die bei Ausführung nichts tut – sie gibt einfach undefined zurück, ohne Operationen durchzuführen.
// basic no-op implementation
function noop() {}
// basic no-op implementation
function noop() {}
Die Helfer serverOnly und clientOnly erzwingen eine strikt umgebungsgebundene Ausführung. Sie stellen sicher, dass die dekorierte Funktion nur im richtigen Laufzeitkontext aufrufbar ist. Bei Missbrauch werfen sie aussagekräftige Laufzeitfehler, um unbeabsichtigte Logikausführungen zu verhindern.
import { serverOnly } from '@tanstack/react-start'
const foo = serverOnly(() => 'bar')
foo() // ✅ On server: returns "bar"
// ❌ On client: throws "serverOnly() functions can only be called on the server!"
import { serverOnly } from '@tanstack/react-start'
const foo = serverOnly(() => 'bar')
foo() // ✅ On server: returns "bar"
// ❌ On client: throws "serverOnly() functions can only be called on the server!"
import { clientOnly } from '@tanstack/react-start'
const foo = clientOnly(() => 'bar')
foo() // ✅ On client: returns "bar"
// ❌ On server: throws "clientOnly() functions can only be called on the client!"
import { clientOnly } from '@tanstack/react-start'
const foo = clientOnly(() => 'bar')
foo() // ✅ On client: returns "bar"
// ❌ On server: throws "clientOnly() functions can only be called on the client!"
Hinweis
Diese Funktionen sind nützlich für den API-Zugriff, das Lesen von Dateisystemen, die Verwendung von Browser-APIs oder andere Operationen, die außerhalb ihrer vorgesehenen Umgebung ungültig oder unsicher sind.
Umgebungsfunktionen werden basierend auf der Umgebung für jedes erzeugte Bundle "tree-shaken" (d.h. unnötiger Code wird entfernt).
Funktionen, die mit createIsomorphicFn() erstellt wurden, werden "tree-shaken". Der gesamte Code in .client() wird nicht in das Server-Bundle aufgenommen und umgekehrt.
Auf dem Server wird die Implementierung von clientOnly-Funktionen durch eine Funktion ersetzt, die einen Error auslöst. Das Gegenteil gilt für serverOnly-Funktionen auf dem Client.
Ihre wöchentliche Dosis JavaScript-Nachrichten. Jeden Montag kostenlos an über 100.000 Entwickler geliefert.