diff --git a/src/React.js b/src/React.js index 6e4ec51..0e3ce77 100644 --- a/src/React.js +++ b/src/React.js @@ -108,6 +108,19 @@ function transformState(this_){ } exports.transformState = transformState; +function transformStateWithCallback(this_){ + return function(update){ + return function(cb){ + return function(){ + this_.setState(function(old, props){ + return update(old); + }, cb); + }; + }; + }; +} +exports.transformStateWithCallback = transformStateWithCallback; + function forceUpdateCbImpl(this_, cb) { this_.forceUpdate(function() { return cb(); diff --git a/src/React.purs b/src/React.purs index 571f6ba..fc749e7 100644 --- a/src/React.purs +++ b/src/React.purs @@ -37,6 +37,7 @@ module React , writeState , writeStateWithCallback , transformState + , transformStateWithCallback , forceUpdate , forceUpdateCb @@ -310,6 +311,13 @@ foreign import transformState :: forall props state eff. (state -> state) -> Eff (state :: ReactState ReadWrite | eff) Unit +-- | Transform the component state by applying a function with a callback. +foreign import transformStateWithCallback :: forall props state eff. + ReactThis props state -> + (state -> state) -> + Eff (state :: ReactState ReadWrite | eff) Unit -> + Eff (state :: ReactState ReadWrite | eff) Unit + -- | Force render of a react component. forceUpdate :: forall eff props state. ReactThis props state -> Eff eff Unit