Live rendering

Live rendering lets you render your state on the fly on your renderer, no need to have a dedicated component to act as an intermediary.

There are three mechanisms for live rendering.

Direct

Data only

You can use the method connectLive from the ConanState object directly.

It takes a renderer function as argument.

All you need is to be able to access the ConanState instance.

{counterState$.connectLive(data => (<h1>{data.counter}</h1>))}

You can see this in our Hello Wow! demo.

Data and Monitor Info


{
    counterState$
        .tuple(counterState$.asyncState)
        .connectLive((data, monitorInfo) => 
            (<h1>{data.counter} - {monitorInfo.status}</h1>)
        )
}

HOC

We can also use a High Order Component with live rendering, by using the components StateLive and ContextStateLive:

import {ContextStateLive, StateLive} from "conan-js-core";
import { counterState$ } from "../../state/counter.state$";

<StateLive from={counterState$} renderer={(data, actions) => (<div>
                <button onClick={actions.increment}>Increment!</button>
                <button onClick={actions.decrement}>Decrement!</button>
</div>)}/>;
};

<ContextStateLive renderer={data => (<h1>{data.counter}</h1>)}/>

Composition

Live rendering can also be used with composition. ConanJs provides the functions contextStateLive and stateLive for it:

import {contextStateLive, stateLive} from "conan-js-core";
import { counterState$ } from "../../state/counter.state$";

stateLive(counterState$, (data, actions) => (<div>
            <button onClick={actions.increment}>Increment!</button>
            <button onClick={actions.decrement}>Decrement!</button>
            <CounterDisplay />
        </div>));
        
contextStateLive(data => (<h1>{data.counter}</h1>))

Please take a look at this code sandbox to see al the subscription approaches working:

Last updated