Skip to content
This repository was archived by the owner on Feb 28, 2019. It is now read-only.

Commit ddb65c8

Browse files
committed
Import source from react4j
1 parent 9c9f1da commit ddb65c8

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<module>
3+
<inherits name="react4j.dom.ReactDOM"/>
4+
<inherits name="com.google.gwt.user.UI"/>
5+
6+
<source path=''/>
7+
</module>
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package react4j.widget;
2+
3+
import com.google.gwt.dom.client.Document;
4+
import com.google.gwt.dom.client.Element;
5+
import com.google.gwt.user.client.ui.Widget;
6+
import java.util.Objects;
7+
import javax.annotation.Nonnull;
8+
import jsinterop.base.Js;
9+
import react4j.core.ReactNode;
10+
import react4j.dom.ReactDOM;
11+
12+
/**
13+
* A GWT widget that renders a React4j element.
14+
*/
15+
public class ReactWidget
16+
extends Widget
17+
{
18+
/**
19+
* The GWT Element representation.
20+
*/
21+
private final Element _element;
22+
/**
23+
* The react widget to render.
24+
*/
25+
private final ReactNode _reactElement;
26+
27+
/**
28+
* Create the widget.
29+
*
30+
* @param reactElement the react element to render.
31+
*/
32+
public ReactWidget( @Nonnull final ReactNode reactElement )
33+
{
34+
_element = Document.get().createDivElement();
35+
_reactElement = Objects.requireNonNull( reactElement );
36+
setElement( _element );
37+
}
38+
39+
/**
40+
* {@inheritDoc}
41+
*/
42+
@Override
43+
public void onAttach()
44+
{
45+
super.onAttach();
46+
ReactDOM.render( _reactElement, Js.uncheckedCast( _element ) );
47+
48+
}
49+
50+
/**
51+
* {@inheritDoc}
52+
*/
53+
@Override
54+
public void onDetach()
55+
{
56+
ReactDOM.unmountComponentAtNode( Js.uncheckedCast( _element ) );
57+
super.onDetach();
58+
}
59+
}

0 commit comments

Comments
 (0)