@@ -64,13 +64,19 @@ let helloWorld: unit => Promise<string>
64
64
65
65
``` res example
66
66
// src/pages/Index.res
67
+ let data = [1, 2, 3]
68
+ let getData = () => Promise.resolve(data)
69
+
67
70
@react.component
68
71
let make = async () => {
69
72
// fetch some data from somewhere
70
73
let data = await getData()
71
74
<html>
72
75
<body>
73
76
<h1> {React.string("Hello from server component")} </h1>
77
+ <ul>
78
+ {data->Array.map(id => <li> {React.int(id)} </li>)->React.array}
79
+ </ul>
74
80
</body>
75
81
</html>
76
82
}
@@ -112,29 +118,55 @@ A server function can be inlined in a server component and passed as prop to a c
112
118
<CodeTab labels = { [" ReScript" , " JS Output" ]} >
113
119
114
120
``` res
121
+ module ClientComp = {
122
+ @react.component @module("some-module")
123
+ external make: (~submit: int => promise<bool>) => React.element =
124
+ "SomeClientComp"
125
+ }
126
+
127
+ let data = [1, 2, 3]
128
+ let getData = () => Promise.resolve(data)
129
+
115
130
@react.component
116
131
let make = async () => {
117
132
let data = await getData()
118
133
119
134
let addData =
120
135
@directive("'use server'")
121
- async (name: string ) => {
136
+ async (id: int ) => {
122
137
// add to data store
138
+ data->Array.push(id)
123
139
true
124
140
}
125
141
<html>
126
142
<body>
127
143
<h1> {React.string("Hello from server component")} </h1>
144
+ <ul>
145
+ {data->Array.map(id => <li> {React.int(id)} </li>)->React.array}
146
+ </ul>
128
147
<ClientComp submit={addData} />
129
148
</body>
130
149
</html>
131
150
}
132
151
```
133
152
``` js
153
+ import * as SomeModule from " some-module" ;
154
+
155
+ let data = [
156
+ 1 ,
157
+ 2 ,
158
+ 3
159
+ ];
160
+
161
+ function getData () {
162
+ return Promise .resolve (data);
163
+ }
164
+
134
165
async function make (param ) {
135
- await getData ( );
136
- let addData = async name => {
166
+ let data$1 = await Promise . resolve (data );
167
+ let addData = async id => {
137
168
' use server' ;
169
+ data$1 .push (id);
138
170
return true ;
139
171
};
140
172
return JsxRuntime .jsx (" html" , {
@@ -143,7 +175,12 @@ async function make(param) {
143
175
JsxRuntime .jsx (" h1" , {
144
176
children: " Hello from server component"
145
177
}),
146
- JsxRuntime .jsx (ClientComp, {
178
+ JsxRuntime .jsx (" ul" , {
179
+ children: data$1 .map (id => JsxRuntime .jsx (" li" , {
180
+ children: id
181
+ }))
182
+ }),
183
+ JsxRuntime .jsx (SomeModule .SomeClientComp , {
147
184
submit: addData
148
185
})
149
186
]
0 commit comments