API โ @builder.io/qwik-city
Action
export type Action<
RETURN,
INPUT = Record<string, unknown>,
OPTIONAL extends boolean = true,
> = {
(): ActionStore<RETURN, INPUT, OPTIONAL>;
};
References: ActionStore
ActionConstructor
export type ActionConstructor = {
<
OBJ extends Record<string, any> | void | null,
VALIDATOR extends TypedDataValidator,
REST extends [DataValidator, ...DataValidator[]],
>(
actionQrl: (
data: GetValidatorOutputType<VALIDATOR>,
event: RequestEventAction,
) => ValueOrPromise<OBJ>,
options: {
readonly id?: string;
readonly validation: [VALIDATOR, ...REST];
},
): Action<
StrictUnion<
| OBJ
| FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>>
| FailReturn<FailOfRest<REST>>
>,
GetValidatorInputType<VALIDATOR>,
false
>;
<
OBJ extends Record<string, any> | void | null,
VALIDATOR extends TypedDataValidator,
>(
actionQrl: (
data: GetValidatorOutputType<VALIDATOR>,
event: RequestEventAction,
) => ValueOrPromise<OBJ>,
options: {
readonly id?: string;
readonly validation: [VALIDATOR];
},
): Action<
StrictUnion<
OBJ | FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>>
>,
GetValidatorInputType<VALIDATOR>,
false
>;
<
OBJ extends Record<string, any> | void | null,
REST extends [DataValidator, ...DataValidator[]],
>(
actionQrl: (
data: JSONObject,
event: RequestEventAction,
) => ValueOrPromise<OBJ>,
options: {
readonly id?: string;
readonly validation: REST;
},
): Action<StrictUnion<OBJ | FailReturn<FailOfRest<REST>>>>;
<
OBJ extends Record<string, any> | void | null,
VALIDATOR extends TypedDataValidator,
REST extends [DataValidator, ...DataValidator[]],
>(
actionQrl: (
data: GetValidatorOutputType<VALIDATOR>,
event: RequestEventAction,
) => ValueOrPromise<OBJ>,
options: VALIDATOR,
...rest: REST
): Action<
StrictUnion<
| OBJ
| FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>>
| FailReturn<FailOfRest<REST>>
>,
GetValidatorInputType<VALIDATOR>,
false
>;
<
OBJ extends Record<string, any> | void | null,
VALIDATOR extends TypedDataValidator,
>(
actionQrl: (
data: GetValidatorOutputType<VALIDATOR>,
event: RequestEventAction,
) => ValueOrPromise<OBJ>,
options: VALIDATOR,
): Action<
StrictUnion<
OBJ | FailReturn<ValidatorErrorType<GetValidatorInputType<VALIDATOR>>>
>,
GetValidatorInputType<VALIDATOR>,
false
>;
<
OBJ extends Record<string, any> | void | null,
REST extends [DataValidator, ...DataValidator[]],
>(
actionQrl: (
form: JSONObject,
event: RequestEventAction,
) => ValueOrPromise<OBJ>,
...rest: REST
): Action<StrictUnion<OBJ | FailReturn<FailOfRest<REST>>>>;
<OBJ>(
actionQrl: (
form: JSONObject,
event: RequestEventAction,
) => ValueOrPromise<OBJ>,
options?: {
readonly id?: string;
},
): Action<StrictUnion<OBJ>>;
};
References: TypedDataValidator, DataValidator, GetValidatorOutputType, Action, StrictUnion, FailReturn, ValidatorErrorType, GetValidatorInputType, FailOfRest, JSONObject
ActionReturn
export type ActionReturn<RETURN> = {
readonly status?: number;
readonly value: RETURN;
};
ActionStore
export type ActionStore<RETURN, INPUT, OPTIONAL extends boolean = true> = {
readonly actionPath: string;
readonly isRunning: boolean;
readonly status?: number;
readonly formData: FormData | undefined;
readonly value: RETURN | undefined;
readonly submit: QRL<
OPTIONAL extends true
? (form?: INPUT | FormData | SubmitEvent) => Promise<ActionReturn<RETURN>>
: (form: INPUT | FormData | SubmitEvent) => Promise<ActionReturn<RETURN>>
>;
readonly submitted: boolean;
};
References: ActionReturn
ContentHeading
export interface ContentHeading
Property | Modifiers | Type | Description |
|---|---|---|---|
| string | ||
| number | ||
| string |
ContentMenu
export interface ContentMenu
Property | Modifiers | Type | Description |
|---|---|---|---|
| string | (Optional) | |
| (Optional) | ||
| string |
DataValidator
export type DataValidator<T extends Record<string, any> = {}> = {
validate(ev: RequestEvent, data: unknown): Promise<ValidatorReturn<T>>;
};
References: ValidatorReturn
DocumentHead
export type DocumentHead =
| DocumentHeadValue
| ((props: DocumentHeadProps) => DocumentHeadValue);
References: DocumentHeadValue, DocumentHeadProps
DocumentHeadProps
export interface DocumentHeadProps extends RouteLocation
Extends: RouteLocation
Property | Modifiers | Type | Description |
|---|---|---|---|
| |||
| ResolveSyncValue | ||
| <T>(fn: () => T) => T |
DocumentHeadValue
export interface DocumentHeadValue<FrontMatter extends Record<string, any> = Record<string, unknown>>
Property | Modifiers | Type | Description |
|---|---|---|---|
| Readonly<FrontMatter> | (Optional) Arbitrary object containing custom data. When the document head is created from markdown files, the frontmatter attributes that are not recognized as a well-known meta names (such as title, description, author, etc...), are stored in this property. | |
| readonly DocumentLink[] | (Optional) Used to manually append | |
| readonly DocumentMeta[] | (Optional) Used to manually set meta tags in the head. Additionally, the | |
| readonly DocumentScript[] | (Optional) Used to manually append | |
| readonly DocumentStyle[] | (Optional) Used to manually append | |
| string | (Optional) Sets |
DocumentLink
export interface DocumentLink
Property | Modifiers | Type | Description |
|---|---|---|---|
string | (Optional) | ||
string | (Optional) | ||
boolean | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) | ||
string | (Optional) |
DocumentMeta
export interface DocumentMeta
Property | Modifiers | Type | Description |
|---|---|---|---|
| string | (Optional) | |
| string | (Optional) | |
| string | (Optional) | |
| string | (Optional) | |
| string | (Optional) | |
| string | (Optional) | |
| string | (Optional) |
DocumentScript
This API is provided as an alpha preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
export interface DocumentScript
Property | Modifiers | Type | Description |
|---|---|---|---|
| string | (ALPHA) (Optional) | |
| Readonly<QwikIntrinsicElements['script']> | (ALPHA) (Optional) | |
| string | (ALPHA) (Optional) |
DocumentStyle
export interface DocumentStyle
Property | Modifiers | Type | Description |
|---|---|---|---|
| string | (Optional) | |
| Readonly<QwikIntrinsicElements['style']> | (Optional) | |
| string |
ErrorBoundary
ErrorBoundary: import("@builder.io/qwik").Component<ErrorBoundaryProps>;
FailOfRest
export type FailOfRest<REST extends readonly DataValidator[]> =
REST extends readonly DataValidator<infer ERROR>[] ? ERROR : never;
References: DataValidator
FailReturn
export type FailReturn<T> = T & Failed;
Form
Form: <O, I>(
{ action, spaReset, reloadDocument, onSubmit$, ...rest }: FormProps<O, I>,
key: string | null,
) => import("@builder.io/qwik").JSXOutput;
Parameter | Type | Description |
|---|---|---|
{ action, spaReset, reloadDocument, onSubmit$, ...rest } | FormProps<O, I> | |
key | string | null |
Returns:
import("@builder.io/qwik").JSXOutput
FormProps
export interface FormProps<O, I> extends Omit<QwikJSX.IntrinsicElements['form'], 'action' | 'method'>
Extends: Omit<QwikJSX.IntrinsicElements['form'], 'action' | 'method'>
Property | Modifiers | Type | Description |
|---|---|---|---|
ActionStore<O, I, true | false> | (Optional) Reference to the action returned by | ||
string | number | null | (Optional) | ||
QRLEventHandlerMulti<SubmitEvent, HTMLFormElement> | undefined | (Optional) Event handler executed right when the form is submitted. | ||
QRLEventHandlerMulti<CustomEvent<FormSubmitCompletedDetail<O>>, HTMLFormElement> | undefined | (Optional) Event handler executed right after the action is executed successfully and returns some data. | ||
boolean | (Optional) When | ||
boolean | (Optional) When Defaults to |
FormSubmitSuccessDetail
export interface FormSubmitCompletedDetail<T>
Property | Modifiers | Type | Description |
|---|---|---|---|
number | |||
T |
GetValidatorInputType
export type GetValidatorInputType<VALIDATOR extends TypedDataValidator> =
VALIDATOR extends ValibotDataValidator<infer TYPE>
? v.InferInput<TYPE>
: VALIDATOR extends ZodDataValidator<infer TYPE>
? z.input<TYPE>
: never;
References: TypedDataValidator
GetValidatorOutputType
export type GetValidatorOutputType<VALIDATOR extends TypedDataValidator> =
VALIDATOR extends ValibotDataValidator<infer TYPE>
? v.InferOutput<TYPE>
: VALIDATOR extends ZodDataValidator<infer TYPE>
? z.output<TYPE>
: never;
References: TypedDataValidator
GetValidatorType
export type GetValidatorType<VALIDATOR extends TypedDataValidator> =
GetValidatorOutputType<VALIDATOR>;
References: TypedDataValidator, GetValidatorOutputType
globalAction$
globalAction$: ActionConstructor;
globalActionQrl
globalActionQrl: ActionConstructorQRL;
JSONObject
export type JSONObject = {
[x: string]: JSONValue;
};
References: JSONValue
JSONValue
export type JSONValue =
| string
| number
| boolean
| {
[x: string]: JSONValue;
}
| Array<JSONValue>;
References: JSONValue
Link
Link: import("@builder.io/qwik").Component<LinkProps>;
LinkProps
export interface LinkProps extends AnchorAttributes
Extends: AnchorAttributes
Property | Modifiers | Type | Description |
|---|---|---|---|
boolean | 'js' | (Optional) **Defaults to _true_.** Whether Qwik should prefetch and cache the target page of this ** This **improves UX performance** for client-side (**SPA**) navigations. Prefetching occurs when a the Link enters the viewport in production (** Prefetching will not occur if the user has the **data saver** setting enabled. Setting this value to ** | ||
boolean | (Optional) | ||
boolean | (Optional) | ||
boolean | (Optional) |
Loader_2
export type Loader<RETURN> = {
(): LoaderSignal<RETURN>;
};
References: LoaderSignal
LoaderSignal
export type LoaderSignal<TYPE> = TYPE extends () => ValueOrPromise<
infer VALIDATOR
>
? ReadonlySignal<ValueOrPromise<VALIDATOR>>
: ReadonlySignal<TYPE>;
MenuData
export type MenuData = [pathname: string, menuLoader: MenuModuleLoader];
NavigationType
export type NavigationType = "initial" | "form" | "link" | "popstate";
PageModule
export interface PageModule extends RouteModule
Extends: RouteModule
Property | Modifiers | Type | Description |
|---|---|---|---|
| unknown | ||
| ContentModuleHead | (Optional) | |
| (Optional) | ||
| (Optional) |
PathParams
export declare type PathParams = Record<string, string>;
PreventNavigateCallback
export type PreventNavigateCallback = (
url?: number | URL,
) => ValueOrPromise<boolean>;
QWIK_CITY_SCROLLER
QWIK_CITY_SCROLLER = "_qCityScroller";
QwikCityMockProps
export interface QwikCityMockProps
Property | Modifiers | Type | Description |
|---|---|---|---|
(Optional) | |||
Record<string, string> | (Optional) | ||
string | (Optional) |
QwikCityMockProvider
QwikCityMockProvider: import("@builder.io/qwik").Component<QwikCityMockProps>;
QwikCityPlan
export interface QwikCityPlan
Property | Modifiers | Type | Description |
|---|---|---|---|
| string | (Optional) | |
| boolean | (Optional) | |
| MenuData[] | (Optional) | |
| |||
| RouteModule[] | (Optional) | |
| boolean | (Optional) |
QwikCityProps
export interface QwikCityProps
Property | Modifiers | Type | Description |
|---|---|---|---|
boolean | (Optional) Enable the ViewTransition API Default: |
QwikCityProvider
QwikCityProvider: import("@builder.io/qwik").Component<QwikCityProps>;
ResolvedDocumentHead
export type ResolvedDocumentHead<
FrontMatter extends Record<string, any> = Record<string, unknown>,
> = Required<DocumentHeadValue<FrontMatter>>;
References: DocumentHeadValue
routeAction$
routeAction$: ActionConstructor;
routeActionQrl
routeActionQrl: ActionConstructorQRL;
RouteData
export type RouteData =
| [routeName: string, loaders: ModuleLoader[]]
| [
routeName: string,
loaders: ModuleLoader[],
originalPathname: string,
routeBundleNames: string[],
];
routeLoader$
routeLoader$: LoaderConstructor;
routeLoaderQrl
routeLoaderQrl: LoaderConstructorQRL;
RouteLocation
export interface RouteLocation
Property | Modifiers | Type | Description |
|---|---|---|---|
| boolean | ||
| Readonly<Record<string, string>> | ||
| URL | undefined | ||
| URL |
RouteNavigate
export type RouteNavigate = QRL<
(
path?: string | number | URL,
options?:
| {
type?: Exclude<NavigationType, "initial">;
forceReload?: boolean;
replaceState?: boolean;
scroll?: boolean;
}
| boolean,
) => Promise<void>
>;
References: NavigationType
RouterOutlet
RouterOutlet: import("@builder.io/qwik").Component<unknown>;
server$
server$: <T extends ServerFunction>(
qrl: T,
options?: ServerConfig | undefined,
) => ServerQRL<T>;
Parameter | Type | Description |
|---|---|---|
qrl | T | |
options | ServerConfig | undefined | (Optional) |
Returns:
ServerQRL<T>
ServerFunction
export type ServerFunction = {
(this: RequestEventBase, ...args: any[]): any;
options?: ServerConfig;
};
serverQrl
You can pass an AbortSignal as the first argument of a server$ function and it will use it to abort the fetch when fired.
export type ServerQRL<T extends ServerFunction> = QRL<
| ((abort: AbortSignal, ...args: Parameters<T>) => ReturnType<T>)
| ((...args: Parameters<T>) => ReturnType<T>)
>;
References: ServerFunction
ServerQRL
You can pass an AbortSignal as the first argument of a server$ function and it will use it to abort the fetch when fired.
export type ServerQRL<T extends ServerFunction> = QRL<
| ((abort: AbortSignal, ...args: Parameters<T>) => ReturnType<T>)
| ((...args: Parameters<T>) => ReturnType<T>)
>;
References: ServerFunction
ServiceWorkerRegister
Loads the service workers that are defined in the routes. Any file named service-worker.* (all JS extensions are allowed) will be picked up, bundled into a separate file, and registered as a service worker.
Qwik 1.14.0 and above now use <link rel="modulepreload"> by default. If you didn't add custom service-worker logic, you should remove your service-worker.ts file(s) for the ServiceWorkerRegister Component to actually unregister the service-worker.js and delete its related cache. Make sure to keep the ServiceWorkerRegister Component in your app (without any service-worker.ts file) as long as you want to unregister the service-worker.js for your users.
ServiceWorkerRegister: (props: { nonce?: string }) => JSXOutput;
Parameter | Type | Description |
|---|---|---|
props | { nonce?: string; } |
Returns:
JSXOutput
StaticGenerate
export interface StaticGenerate
Property | Modifiers | Type | Description |
|---|---|---|---|
(Optional) |
StaticGenerateHandler
export type StaticGenerateHandler = ({
env,
}: {
env: EnvGetter;
}) => Promise<StaticGenerate> | StaticGenerate;
References: StaticGenerate
StrictUnion
export type StrictUnion<T> = Prettify<StrictUnionHelper<T, T>>;
TypedDataValidator
export type TypedDataValidator = ValibotDataValidator | ZodDataValidator;
useContent
useContent: () => import("./types").ContentState;
Returns:
import("./types").ContentState
useDocumentHead
Returns the document head for the current page. The generic type describes the front matter.
useDocumentHead: <
FrontMatter extends Record<string, unknown> = Record<string, any>,
>() => Required<ResolvedDocumentHead<FrontMatter>>;
Returns:
Required<ResolvedDocumentHead<FrontMatter>>
useLocation
useLocation: () => RouteLocation;
Returns:
useNavigate
useNavigate: () => RouteNavigate;
Returns:
usePreventNavigate$
Prevent navigation attempts. This hook registers a callback that will be called before SPA or browser navigation.
Return true to prevent navigation.
#### SPA Navigation
For Single-Page-App (SPA) navigation (via <Link />, const nav = useNavigate(), and browser backwards/forwards inside SPA history), the callback will be provided with the target, either a URL or a number. It will only be a number if nav(number) was called to navigate forwards or backwards in SPA history.
If you return a Promise, the navigation will be blocked until the promise resolves.
This can be used to show a nice dialog to the user, and wait for the user to confirm, or to record the url, prevent the navigation, and navigate there later via nav(url).
#### Browser Navigation
However, when the user navigates away by clicking on a regular <a />, reloading, or moving backwards/forwards outside SPA history, this callback will not be awaited. This is because the browser does not provide a way to asynchronously prevent these navigations.
In this case, returning returning true will tell the browser to show a confirmation dialog, which cannot be customized. You are also not able to show your own window.confirm() dialog during the callback, the browser won't allow it. If you return a Promise, it will be considered as true.
When the callback is called from the browser, no url will be provided. Use this to know whether you can show a dialog or just return true to prevent the navigation.
usePreventNavigate$: (qrl: PreventNavigateCallback) => void
Parameter | Type | Description |
|---|---|---|
qrl |
Returns:
void
valibot$
This API is provided as an alpha preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
valibot$: ValibotConstructor;
valibotQrl
This API is provided as an alpha preview for developers and may change based on feedback that we receive. Do not use this API in a production environment.
valibotQrl: ValibotConstructorQRL;
validator$
validator$: ValidatorConstructor;
ValidatorErrorKeyDotNotation
export type ValidatorErrorKeyDotNotation<T, Prefix extends string = ""> =
IsAny<T> extends true
? never
: T extends object
? {
[K in keyof T & string]: IsAny<T[K]> extends true
? never
: T[K] extends (infer U)[]
? IsAny<U> extends true
? never
: U extends object
?
| `${Prefix}${K}[]`
| ValidatorErrorKeyDotNotation<U, `${Prefix}${K}[].`>
: `${Prefix}${K}[]`
: T[K] extends object
? ValidatorErrorKeyDotNotation<T[K], `${Prefix}${K}.`>
: `${Prefix}${K}`;
}[keyof T & string]
: never;
References: ValidatorErrorKeyDotNotation
ValidatorErrorType
export type ValidatorErrorType<T, U = string> = {
formErrors: U[];
fieldErrors: Partial<{
[K in ValidatorErrorKeyDotNotation<T>]: K extends `${infer _Prefix}[]${infer _Suffix}`
? U[]
: U;
}>;
};
References: ValidatorErrorKeyDotNotation
validatorQrl
validatorQrl: ValidatorConstructorQRL;
ValidatorReturn
export type ValidatorReturn<T extends Record<string, any> = {}> =
| ValidatorReturnSuccess
| ValidatorReturnFail<T>;
zod$
zod$: ZodConstructor;
ZodConstructor
export type ZodConstructor = {
<T extends z.ZodRawShape>(schema: T): ZodDataValidator<z.ZodObject<T>>;
<T extends z.ZodRawShape>(
schema: (zod: typeof z.z, ev: RequestEvent) => T,
): ZodDataValidator<z.ZodObject<T>>;
<T extends z.Schema>(schema: T): ZodDataValidator<T>;
<T extends z.Schema>(
schema: (zod: typeof z.z, ev: RequestEvent) => T,
): ZodDataValidator<T>;
};
zodQrl
zodQrl: ZodConstructorQRL;
Retrieving Headings with useContent
The useContent hook is a powerful utility in Qwik City that allows you to access the content state of the current page. One of its key features is the ability to retrieve all the headings from .mdx files. This is particularly useful for generating sidebar links or a table of contents for the current page.
Example: Generating Sidebar Links
Here's an example of how you can use useContent to retrieve and display the headings of the current .mdx page:
import { component$, useContent } from '@builder.io/qwik';
export const Sidebar = component$(() => {
const content = useContent();
return (
<nav>
<ul>
{content.headings?.map((heading) => (
<li key={heading.id}>
<a href={`#${heading.id}`}>{heading.text}</a>
</li>
))}
</ul>
</nav>
);
});
Notes
- The
useContenthook only works with.mdxfiles. It does not retrieve headings from.tsxfiles. - The
headingsproperty contains an array of objects, each representing a heading with the following structure:id: The unique identifier for the heading.text: The text content of the heading.level: The heading level (e.g.,1for<h1>,2for<h2>, etc.).
When to Use
This feature is particularly useful for:
- Creating a dynamic table of contents for documentation pages.
- Building sidebar navigation for blog posts or articles.
For more details, refer to the useContent API documentation.