Skip to content

Commit a03d67d

Browse files
author
Michael Trotter
committed
Refactor Self, plus more FFI perf improvements
1 parent 07df783 commit a03d67d

12 files changed

Lines changed: 246 additions & 204 deletions

File tree

examples/component/src/Container.purs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@ import Prelude
44

55
import React.Basic (Component, JSX, createComponent, makeStateless)
66
import React.Basic.DOM as R
7-
import ToggleButton as ToggleButton
7+
import ToggleButton (toggleButton)
88

9-
render :: JSX
10-
render = unit # makeStateless component \_ ->
9+
toggleButtonContainer :: JSX
10+
toggleButtonContainer = unit # makeStateless component \_ ->
1111
R.div
1212
{ children:
13-
[ ToggleButton.render { label: "A" }
14-
, ToggleButton.render { label: "B" }
13+
[ toggleButton { label: "A" }
14+
, toggleButton { label: "B" }
1515
]
1616
}
1717

examples/component/src/Main.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module Main where
22

33
import Prelude
44

5-
import Container as Container
5+
import Container (toggleButtonContainer)
66
import Data.Maybe (Maybe(..))
77
import Effect (Effect)
88
import Effect.Exception (throw)
@@ -18,5 +18,5 @@ main = do
1818
case container of
1919
Nothing -> throw "Container element not found."
2020
Just c ->
21-
let app = Container.render
21+
let app = toggleButtonContainer
2222
in render app c

examples/component/src/ToggleButton.purs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ module ToggleButton where
33
import Prelude
44

55
import Effect.Console (log)
6-
import React.Basic (Component, JSX, StateUpdate(..), createComponent, make)
6+
import React.Basic (Component, JSX, StateUpdate(..), capture_, createComponent, make)
77
import React.Basic.DOM as R
88

99
type Props =
@@ -13,8 +13,8 @@ type Props =
1313
data Action
1414
= Toggle
1515

16-
render :: Props -> JSX
17-
render = make component
16+
toggleButton :: Props -> JSX
17+
toggleButton = make component
1818
{ initialState =
1919
{ on: false
2020
}
@@ -28,7 +28,7 @@ render = make component
2828

2929
, render = \self ->
3030
R.button
31-
{ onClick: self.capture_ Toggle
31+
{ onClick: capture_ self Toggle
3232
, children:
3333
[ R.text self.props.label
3434
, R.text if self.state.on

examples/controlled-input/src/ControlledInput.purs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ module ControlledInput where
33
import Prelude
44

55
import Data.Maybe (Maybe(..), fromMaybe, maybe)
6-
import Effect.Console (logShow)
7-
import React.Basic (Component, JSX, StateUpdate(..), createComponent, make)
6+
import React.Basic (Component, JSX, StateUpdate(..), capture, createComponent, make)
87
import React.Basic as React
98
import React.Basic.DOM as R
109
import React.Basic.DOM.Events (targetValue, timeStamp)
@@ -15,8 +14,8 @@ type Props = {}
1514
data Action
1615
= ValueChanged String Number
1716

18-
render :: Props -> JSX
19-
render = make component
17+
controlledInput :: Props -> JSX
18+
controlledInput = make component
2019
{ initialState =
2120
{ value: "hello world"
2221
, timestamp: Nothing
@@ -29,22 +28,18 @@ render = make component
2928
, timestamp = Just timestamp
3029
}
3130

32-
, render = render
33-
}
34-
where
35-
render self =
31+
, render = \self ->
3632
React.fragment
3733
[ R.input
3834
{ onChange:
39-
self.capture
40-
(merge { targetValue, timeStamp })
35+
capture self (merge { targetValue, timeStamp })
4136
\{ timeStamp, targetValue } -> ValueChanged (fromMaybe "" targetValue) timeStamp
4237
, value: self.state.value
4338
}
4439
, R.p_ [ R.text ("Current value = " <> show self.state.value) ]
4540
, R.p_ [ R.text ("Changed at = " <> maybe "never" show self.state.timestamp) ]
4641
]
47-
42+
}
4843

4944
component :: Component
5045
component = createComponent "ControlledInput"

examples/controlled-input/src/Main.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module Main where
22

33
import Prelude
44

5-
import ControlledInput as ControlledInput
5+
import ControlledInput (controlledInput)
66
import Data.Maybe (Maybe(..))
77
import Effect (Effect)
88
import Effect.Exception (throw)
@@ -18,5 +18,5 @@ main = do
1818
case container of
1919
Nothing -> throw "Container element not found."
2020
Just c ->
21-
let app = ControlledInput.render {}
21+
let app = controlledInput {}
2222
in render app c

examples/counter/src/Counter.purs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module Counter where
22

33
import Prelude
44

5-
import React.Basic (Component, JSX, StateUpdate(..), createComponent, make)
5+
import React.Basic (Component, JSX, StateUpdate(..), capture_, createComponent, make)
66
import React.Basic.DOM as R
77

88
type Props =
@@ -12,8 +12,8 @@ type Props =
1212
data Action
1313
= Increment
1414

15-
render :: Props -> JSX
16-
render = make component
15+
counter :: Props -> JSX
16+
counter = make component
1717
{ initialState = { counter: 0 }
1818

1919
, update = \self -> case _ of
@@ -22,7 +22,7 @@ render = make component
2222

2323
, render = \self ->
2424
R.button
25-
{ onClick: self.capture_ Increment
25+
{ onClick: capture_ self Increment
2626
, children: [ R.text (self.props.label <> ": " <> show self.state.counter) ]
2727
}
2828
}

examples/counter/src/Main.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ module Main where
22

33
import Prelude
44

5-
import Counter as Counter
5+
import Counter (counter)
66
import Data.Maybe (Maybe(..))
77
import Effect (Effect)
88
import Effect.Exception (throw)
@@ -18,5 +18,5 @@ main = do
1818
case container of
1919
Nothing -> throw "Container element not found."
2020
Just c ->
21-
let app = Counter.render { label: "Increment" }
21+
let app = counter { label: "Increment" }
2222
in render app c

examples/legacy-v2/src/Compat.purs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ module React.Basic.Compat
88
import Prelude
99

1010
import Effect (Effect)
11-
import React.Basic (JSX, ReactComponent, Self, StateUpdate(..), ComponentSpec, createComponent, element, elementKeyed, empty, fragment, fragmentKeyed, make, makeStateless, toReactComponent)
11+
import React.Basic (ComponentSpec, JSX, ReactComponent, Self, StateUpdate(..), createComponent, element, elementKeyed, empty, fragment, fragmentKeyed, make, makeStateless, send, toReactComponent)
1212

1313
type Component = ReactComponent
1414

@@ -22,18 +22,18 @@ component
2222
}
2323
-> ReactComponent { | props }
2424
component { displayName, initialState, receiveProps, render } =
25-
toReactComponent (createComponent displayName)
25+
toReactComponent identity (createComponent displayName)
2626
{ initialState = initialState
2727
, didMount = receiveProps <<< selfToLegacySelf
2828
, didUpdate = receiveProps <<< selfToLegacySelf
2929
, update = \self stateUpdate -> Update (stateUpdate self.state)
3030
, render = render <<< selfToLegacySelf
3131
}
3232
where
33-
selfToLegacySelf { props, state, send } =
33+
selfToLegacySelf self@{ props, state } =
3434
{ props
3535
, state
36-
, setState: send
36+
, setState: send self
3737
}
3838

3939
-- | Supports a common subset of the v2 API to ease the upgrade process
@@ -44,6 +44,6 @@ stateless
4444
}
4545
-> ReactComponent { | props }
4646
stateless { displayName, render } =
47-
toReactComponent (createComponent displayName)
47+
toReactComponent identity (createComponent displayName)
4848
{ render = \self -> render self.props
4949
}

examples/legacy-v2/src/LegacyCounter.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ type Props =
1111
}
1212

1313
-- | checks `component`
14-
counter :: Component Props
15-
counter = component { displayName: "LegacyCounter", initialState, receiveProps, render }
14+
legacyCounter :: Component Props
15+
legacyCounter = component { displayName: "LegacyCounter", initialState, receiveProps, render }
1616
where
1717
initialState =
1818
{ counter: 0

examples/legacy-v2/src/Main.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Prelude
55
import Data.Maybe (Maybe(..))
66
import Effect (Effect)
77
import Effect.Exception (throw)
8-
import LegacyCounter as LegacyCounter
8+
import LegacyCounter (legacyCounter)
99
import React.Basic (element)
1010
import React.Basic.DOM (render)
1111
import Web.DOM.NonElementParentNode (getElementById)
@@ -19,5 +19,5 @@ main = do
1919
case container of
2020
Nothing -> throw "Container element not found."
2121
Just c ->
22-
let app = element LegacyCounter.counter { label: "Increment" }
22+
let app = element legacyCounter { label: "Increment" }
2323
in render app c

0 commit comments

Comments
 (0)