Skip to content

Commit 4b8b63e

Browse files
committed
Reimplemented React demo using hooks.
1 parent a34354d commit 4b8b63e

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

transcrypt/demos/react_demo/react_demo.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<head>
44
<meta charset="UTF-8" />
55
<title>Hello React!</title>
6-
<script src="https://fb.me/react-with-addons-15.1.0.min.js"></script>
7-
<script src="https://fb.me/react-dom-15.1.0.min.js"></script>
6+
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
7+
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
88
<style>
99
body {font-family:arial;font-size:30px;padding:50px;background-color:#eeeeee;}
1010
h1 {font-size:50px;color:#0000ff;}

transcrypt/demos/react_demo/react_demo.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,44 @@ def render(react_element, destination_id, callback=lambda: None):
1010
ReactDOM.render(react_element, container, callback)
1111

1212

13-
# Create a component
13+
useState = React.useState
14+
useEffect = React.useEffect
15+
useRef = React.useRef
16+
1417

18+
def useInterval(func, delay):
19+
ref = useRef(func)
20+
ref.current = func
1521

16-
Hello = React.createClass({
17-
'displayName': 'Hello',
22+
def setup():
23+
id = setInterval(lambda: ref.current(), delay)
24+
return lambda: cleanInterval(id)
1825

19-
'getInitialState': lambda: {'counter': 0},
26+
useEffect(setup, [delay])
2027

21-
'updateCounter': lambda: (this.setState({'counter': this.state['counter']+1})),
2228

23-
'componentDidMount': lambda: (setInterval(this.updateCounter, 1000)),
29+
# Create a component
2430

25-
'render': lambda: h('div', {'className': 'maindiv'},
26-
h('h1', None, 'Hello ', this.props['name']),
27-
h('p', None, 'Lorem ipsum dolor sit ame.'),
28-
h('p', None, 'Counter: ', this.state['counter'])
29-
)
30-
})
31+
def Hello(props):
32+
count, setCount = useState(0)
33+
34+
def updateCounter():
35+
setCount(count+1)
36+
37+
useInterval(updateCounter, 1000)
38+
39+
return h(
40+
'div',
41+
{'className': 'maindiv'},
42+
h('h1', None, 'Hello ', props['name']),
43+
h('p', None, 'Lorem ipsum dolor sit ame.'),
44+
h('p', None, 'Counter: ', count),
45+
h(
46+
'button',
47+
{'onClick': updateCounter},
48+
'Increment',
49+
)
50+
)
3151

3252

3353
# Render the component in a 'container' div

0 commit comments

Comments
 (0)