File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -71,3 +71,15 @@ export default define.page<typeof handler>((props) => {
7171 );
7272});
7373```
74+
75+ There is also a ` define.layout() ` helper for layouts:
76+
77+ ``` tsx
78+ export default define .layout ((props ) => {
79+ return (
80+ <div >
81+ <h1 >I like { props .state .foo } </h1 >
82+ </div >
83+ );
84+ });
85+ ```
Original file line number Diff line number Diff line change @@ -136,6 +136,22 @@ export interface Define<State> {
136136 middleware < M extends Middleware < State > | Middleware < State > [ ] > (
137137 middleware : M ,
138138 ) : typeof middleware ;
139+ /**
140+ * Define a layout component. This function returns the passed input as-is.
141+ *
142+ * You can use this function to help the TypeScript compiler infer the types
143+ * of `props` that your component receives. For example:
144+ *
145+ * ```ts
146+ * import { define } from "../utils.ts";
147+ *
148+ * export default define.layout((props) => {
149+ * const slug = props.params.slug; // Because props is inferred to be a Context object, slug is inferred to be a string
150+ * return <h1>{slug}</h1>;
151+ * });
152+ * ```
153+ */
154+ layout ( render : AnyComponent < PageProps < unknown , State > > ) : typeof render ;
139155}
140156
141157/**
@@ -159,6 +175,9 @@ export function createDefine<State>(): Define<State> {
159175 page ( render ) {
160176 return render ;
161177 } ,
178+ layout ( render ) {
179+ return render ;
180+ } ,
162181 middleware ( middleware ) {
163182 return middleware ;
164183 } ,
You can’t perform that action at this time.
0 commit comments