bigteech / cyclefs

A Cycle-like Fable library for build reactive webapp

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

cyclefs

A Cycle-like Fable library for build reactive webapp

Simple

module App
 open Fable.Import
 open Fable.Cycle
 open FSharp.Control
 open Fable.Core.JsInterop
 open Fable.Helpers.React.Props
 open Operators
 
 
 module R = Fable.Helpers.React
 
 // declare a view
 type Model = {
     Content: string
     Title: string
     OnChange: string -> unit
  }
 
 let SimpleView<'T> = ToView(fun model ->
       R.div [] [
         R.div [] [
             R.str model.Title
         ]
         R.div [] [
             R.textarea [ OnChange(fun ev -> !!ev.target?value |> model.OnChange); Value model.Content ] []
         ]
     ]
 )
 
 // end declare view
 
 
 
 // build view props
 let behaviorSubject<'T> (p: 'T) =
     let dispatch, obs = AsyncRx.subject<'T> ()
     let mutable value: Option<'T> = None
     
     dispatch, obs |> AsyncRx.map (fun x ->
             value <- Some(x)
             x
         ), (fun () -> value)
     
 let dispatchContent, contentObs, getValue1 = behaviorSubject("")
 
 let onChange x =
     async {
         do! dispatchContent.OnNextAsync x
     } |> Async.Start
     ()
 
 //end build view props
 
 type Temp(props) =
     inherit React.Component<unit, unit>(props)
     
     // use view
     override this.render () =
         SimpleView {
             Content =  contentObs |> ofType;   // observable props
             Title = "I am title" // other value
             OnChange =  onChange; // other value
         } []
 let render() =
     ReactDom.render(
         R.ofType<Temp,_,_>  () [],
         Browser.document.getElementById("appcomment")
     )
 render()

use

add github bigteech/cyclefs main.fs to paket.dependencies
add File:main.fs to paket.references

About

A Cycle-like Fable library for build reactive webapp


Languages

Language:F# 100.0%