JSFiddle - React, Tailwind, and code Playground

by rich_harris

HTML

<main></main>

<script id='template' type='text/ractive'>
    <outer/>
</script>

<script id='outer' type='text/ractive'>
    <inner foo='{{message}}'/>
</script>

<script id='inner' type='text/ractive'>
    <p>{{baz}}</p>
</script>

CSS

body {
    font-family: 'Helvetica Neue', arial, sans-serif;
    font-weight: 200;
    color: #353535;
}

h1, h2, h3, h4, h5, h6 {
    font-weight: 200;
}

.error {
    color: #d00;
    font-family: monospace;
}

JavaScript

Ractive.components.outer = Ractive.extend({
    template: '#outer'
});

Ractive.components.inner = Ractive.extend({
    template: '#inner',
    computed: {
        bar: function () {
            return this.get( 'foo' ).toUpperCase();
        },
        baz: function () {
            return this.get( 'bar' ).toLowerCase();
        }
    }
});

try {
    window.ractive = new Ractive({
        el: 'main',
        template: '#template'
    });
    
    ractive.findComponent( 'outer' ).set( 'message', 'this is broken' );
} catch ( err ) {
    document.body.innerHTML = '<pre class="error">' + err.message + '</pre>';
    throw err;
}