GithubHelp home page GithubHelp logo

isabella232 / choop Goto Github PK

View Code? Open in Web Editor NEW

This project forked from choojs/choop

0.0 0.0 0.0 91 KB

๐Ÿš‚โš›๏ธ - choo architecture for preact

License: MIT License

JavaScript 100.00%

choop's Introduction

choop

๐Ÿš‚๐Ÿš‹๐Ÿš‹๐Ÿš‹๐Ÿš‹๐Ÿš‹ + โš›
Full on choo architecture on top of the tiny preact engine.
Currently up-to-date with choo 6.13.1


Ever wondered what would happen if preact 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 get almost all of the React ecosystem through preact-compat ๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰๐ŸŽ‰

Example

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

var app = choop()
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 choop:

var Component = require('choop/component')
var html = require('choop/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('choop/html')
var h = require('choop/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.

state.cache

choo version 6.11.0 introduced a state.cache helper for managing nanocomponent instances. This is not included in choop since component instance management is taken care of by preact.

More Examples

FAQ

Should I use this?

Sometimes you gotta use react, and the best thing to do in that case might be 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! ๐ŸŽ

What's the real difference here?

nanomorph is replaced by preact

How do I run react widgets in choop?

Like this:

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

What's the size?

Something like 8.7 kB

What about choo?

Yeah, what about me? (drumroll)

Installation

$ npm install choop

choop's People

Contributors

jongacnik avatar yoshuawuyts avatar developit avatar arturi avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.