Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

rooch

Package Overview
Dependencies
Maintainers
5
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rooch

Choo x Preact

  • 3.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
15
increased by66.67%
Maintainers
5
Weekly downloads
 
Created
Source

rooch

🚂🚋🚋🚋🚋🚋 + ⚛
Full on choo architecture on top of the tiny preact engine.
Currently up-to-date with choo 6.6.0


Ever wondered what would happen if react and choo got a baby?

Welp, wonder no longer - here's the answer. Full on choo architecture plus a couple preact goodies like h() and components. No JSX, only template strings via hyperx. But you can use JSX if you want to. We even support almost all of the React ecosystem through preact-compat.

🎉🎉🎉🎉

Why is this useful? Sometimes you gotta use react, and the best thing to do in that case is to jump on the preact train, grab a bag of architecture and go to town. This might not be for me, but perhaps it's useful for you. Here you go! 🎁

var html = require('rooch/html')
var devtools = require('choo-devtools')
var rooch = require('rooch')

var app = rooch()
app.use(devtools())
app.use(countStore)
app.route('/', mainView)
app.mount('body')

function mainView (state, emit) {
  return html`
    <main>
      <h1>count is ${state.count}</h1>
      <button onclick=${onclick}>Increment</button>
    </main>
  `

  function onclick () {
    emit('increment', 1)
  }
}

function countStore (state, emitter) {
  state.count = 0
  emitter.on('increment', function (count) {
    state.count += count
    emitter.emit('render')
  })
}

See? Same same as choo!

Only difference is preact will append our app to the element passed into mount. So instead of our main view returning <body> we return <main> (or whatever we want the root to be).

Components

You can create stateful components right out of the box with rooch:

var Component = require('rooch/component')
var html = require('rooch/html')

class ClickMe extends Component {
  constructor () {
    super()
    this.state = { n: 0 }
    this.handleClick = () => {
      this.setState({ n: this.state.n + 1 })
    }
  }
  render (props, state) {
    return html`
      <div>
        <h1>clicked ${state.n} times</h1>
        <button onClick=${this.handleClick}>click me!</button>
      </div>
    `
  }
}

And then render them in your views using h():

var html = require('rooch/html')
var h = require('rooch/h')

var ClickMe = require('./ClickMe')

function view (state, emit) {
  return html`
    <body>
      ${h(ClickMe)}
    </body>
  `
}

Optionally pass data a.k.a. props:

h(MyComponent, { someData: 'beep' })

You can use props or an additional constructor function to pass emit into your components.

FAQ

Should I use this?

Maybe? If you've got no choice other than using (p)react this might be useful.

How do I run react widgets in rooch?

Like this:

npm i -S preact preact-compat
npm i -S preact-compat/react preact-compat/react-dom

What's the size?

Something like 9 kB

What about choo?

Yeah, what about me? (drumroll)

Installation

$ npm install rooch

Keywords

FAQs

Package last updated on 20 Nov 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc