@@ -6,35 +6,87 @@ canonical: "/docs/manual/latest/module-functions"
6
6
7
7
# Module Functions
8
8
9
- ``` rescript
10
- // next.res - bindings for Next
11
- module type Params = {
12
- type t
13
- }
9
+ <CodeTab labels = { [" ReScript" , " JS Output" ]} >
10
+ ``` res example
11
+ module Next = {
12
+ // define a module type to use a parameter for out module function
13
+ module type Params = {
14
+ type t
15
+ }
14
16
15
- module MakeNavigation = (Params: Params) => {
16
- @module("next/navigation")
17
- external useNavigation: unit => Params.t = "useNavigation"
17
+ // define our module function
18
+ module MakeNavigation = (Params: Params) => {
19
+ @module("next/navigation")
20
+ external useNavigation: unit => Params.t = "useNavigation"
21
+ /* You can use values from the function parameter, such as Params.t */
22
+ }
18
23
}
19
24
20
- // Your React component
21
- // component.res
22
- module Params = {
23
- type t = {
24
- tag: string,
25
- item: string,
25
+ module Component: {
26
+ @react.component
27
+ let make: unit => Jsx.element
28
+ } = {
29
+ // Create a module that matches the module type expected by Next.MakeNavigation
30
+ module Params = {
31
+ type t = {
32
+ tag: string,
33
+ item: string,
34
+ }
26
35
}
36
+
37
+ // Create a new module using the Params module we created and the Next.MakeNavigation module function
38
+ module Navigation = Next.MakeNavigation(Params)
39
+
40
+ @react.component
41
+ let make = () => {
42
+ // Use the functions, values, or types created by the module function
43
+ let params = Navigation.useNavigation()
44
+ <div>
45
+ <p>
46
+ {React.string("Tag: " ++ params.tag /* params is fully typed! */)}
47
+ </p>
48
+ <p> {React.string("Item: " ++ params.item)} </p>
49
+ </div>
50
+ }
51
+ }
52
+ ```
53
+ ``` js
54
+ // Generated by ReScript, PLEASE EDIT WITH CARE
55
+
56
+ import * as $$Navigation from " next/navigation" ;
57
+ import * as JsxRuntime from " react/jsx-runtime" ;
58
+
59
+ function MakeNavigation (Params ) {
60
+ return {};
27
61
}
28
62
29
- module Navigation = Next.MakeNavigation(Params)
63
+ var Next = {
64
+ MakeNavigation: MakeNavigation
65
+ };
30
66
31
- @react.component
32
- let make = () => {
33
- let params = Navigation.useNavigation()
34
- <div>
35
- <p> {React.string("Tag: " ++ params.tag)} </p>
36
- <p> {React.string("Item: " ++ params.item)} </p>
37
- </div>
67
+ function Playground$Component (props ) {
68
+ var params = $$Navigation .useNavigation ();
69
+ return JsxRuntime .jsxs (" div" , {
70
+ children: [
71
+ JsxRuntime .jsx (" p" , {
72
+ children: " Tag: " + params .tag
73
+ }),
74
+ JsxRuntime .jsx (" p" , {
75
+ children: " Item: " + params .item
76
+ })
77
+ ]
78
+ });
38
79
}
80
+
81
+ var Component = {
82
+ make: Playground$Component
83
+ };
84
+
85
+ export {
86
+ Next ,
87
+ Component ,
88
+ }
89
+ /* next/navigation Not a pure module */
90
+
39
91
```
40
- import { comma } from " postcss/lib/list "
92
+ </ CodeTab >
0 commit comments