Skip to content

Commit e259063

Browse files
committed
Updates, add some todos
1 parent 474d347 commit e259063

File tree

1 file changed

+58
-23
lines changed

1 file changed

+58
-23
lines changed

text/1099-renderComponent.md

Lines changed: 58 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -133,32 +133,16 @@ The element to render the compnoent into.
133133

134134
The args to pass to the component
135135

136-
### Usage
136+
### Behaviors
137137

138-
via modifier:
139-
```gjs
140-
import { modifier } from 'ember-modifier';
141-
import { destroy } from '@ember/destroyable';
142-
import { renderComponent from '@ember/renderer';
143-
144-
const Demo = <template>hi</template>;
145-
const render = modifier((element) => {
146-
let result = renderComponent(Demo, {
147-
owner,
148-
env: { document: document, isInteractive: true },
149-
into: element,
150-
});
138+
TODO:
139+
- rendering multiple renderComponent on the page
140+
- who creates tracking frames / how do they interop? all of them? are they coordinated?
141+
- shared reactive state between multiple renderComponents
151142

152-
return result.destroy();
153-
});
154-
155-
156-
<template>
157-
<div {{render}}></div>
158-
</template>
159-
```
143+
### Usage
160144

161-
via `template()`:
145+
via `template()` in JSBin:
162146

163147
```html
164148
<DOCTYPE html>
@@ -181,6 +165,57 @@ via `template()`:
181165
</html>
182166
```
183167

168+
rendering ember in React:
169+
```jsx
170+
import { renderComponent } from '@ember/renderer';
171+
import { template } from "@ember/template-compiler";
172+
import React, { useEffect, useRef } from 'react';
173+
174+
const GreetingComponent = template(`Hello World`);
175+
176+
const RunOnceComponent = () => {
177+
const myRef = useRef(null);
178+
179+
useEffect(() => {
180+
if (myRef.current) {
181+
renderComponent(GreetingComponent, {
182+
into: myRef.current,
183+
});
184+
}
185+
}, []);
186+
187+
return (
188+
<div ref={myRef}></div>
189+
);
190+
};
191+
192+
export default RunOnceComponent;
193+
```
194+
195+
if we wanted to render ember in ember via modifier (silly):
196+
```gjs
197+
import { modifier } from 'ember-modifier';
198+
import { destroy } from '@ember/destroyable';
199+
import { renderComponent from '@ember/renderer';
200+
201+
const Demo = <template>hi</template>;
202+
const render = modifier((element) => {
203+
let result = renderComponent(Demo, {
204+
owner,
205+
env: { document: document, isInteractive: true },
206+
into: element,
207+
});
208+
209+
return () => result.destroy();
210+
});
211+
212+
213+
<template>
214+
<div {{render}}></div>
215+
</template>
216+
```
217+
218+
184219
## How we teach this
185220

186221
`renderComponent` is meant as an integration-enabling API and would not be added to the guides, or need any documentation beyond what would live in source on the function itself.

0 commit comments

Comments
 (0)