npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mobx-connect

v0.3.9

Published

MobX @connect decorator for your react/inferno components

Downloads

551

Readme

DEPRECATED

Now that MobX has Provider support, you should use that instead.

For React: mobx-react

For Inferno: mobx-inferno

mobx-connect

Super lightweight (2 kb uncompressed) MobX @connect decorator for react/inferno components. Similar to @connect from react-redux.

Installation

npm install --save mobx-connect

How it works

By decorating your react/inferno component with @connect 2 things happen:

  • Your components becomes observable (so no need to define @observable, since @connect does it for you).
  • Your state and the store actions are inject into this.context.

Usage example (React.JS)

import React from 'react'
import { connect } from 'mobx-connect'

@connect
class App extends React.Component {

    toggleSetting(key) {
        const { settings} = this.context.state
        settings[key] = !settings[key]
    }

    render() {
        const { settings } = this.context.state

        return <div>
            <SettingsView/>
            <button onClick={() => this.toggleSetting('fullscreen')}>
                Turn {settings.fullscreen ? 'OFF' : 'ON'}
            </button>
            <button onClick={() => this.toggleSetting('logger')}>
                Turn {settings.logger ? 'OFF' : 'ON'}
            </button>
        </div>
    }
}

const SettingsView = connect(function(props, context) {
    const { settings } = context.state

    return <div>
        <h1>Settings</h1>
        <p>Fullscreen: {settings.fullscreen ? 'OFF' : 'ON'}</p>
        <p>Logger: {settings.fullscreen ? 'OFF' : 'ON'}</p>
    </div>
})

Usage example (inferno.JS)

import Inferno from 'inferno'
import Component from 'inferno-component'
import { connect } from 'mobx-connect/inferno' // <----

@connect
class App extends Component {
    // Everything else same as with React...
}

Configuration

Ccreate a file called ContextProvider.js. We need to wrap our root component (App in this case) around this ContextProvider before rendering.

const React = require('react')
const { contextTypes } = require('mobx-connect')

class ContextProvider extends React.Component {
    getChildContext() {
        return this.props.context;
    }
    render() {
        return this.props.children;
    }
}

ContextProvider.childContextTypes = contextTypes;

Then we define our default state and our store methods which affect the state.

const { observable } = require('mobx')

const context = {
    // An observable mobx object
    state: observable({
        username: ''
    }),
    store: {
        // Your methods that affect the state here
        // You can make this object deeper for more complicated structures
        // or import from another file
        setUsername(username) {
            context.state.username = username;
        }
    }
}

Finally we inject context into our app and render HTML on the browser

ReactDOM.render(<ContextProvider context={context}>
    <App/>
</ContextProvider>, document.getElementById('content'));

Usage with React-router

const React = require('react')
const ReactDOM = require('react-dom')
const { observable } = require('mobx')
const { Router, RouterContext, browserHistory } = require('react-router')
const ContextProvider = require('./ContextProvider') // or where ever you put it
const routes = require('./routes') // or where ever you put it

const context = {
    state: observable({}),
    store: {}
}

function createElement(props) {
    return <ContextProvider context={context}>
        <RouterContext {...props} />
    </ContextProvider>
}

// Render HTML on the browser
ReactDOM.render(<Router history={browserHistory}
               render={createElement}
               routes={routes}/>,
document.getElementById('container'))

Usage with Inferno-router

import Inferno from 'inferno'
import Component from 'inferno-component'
import InfernoDOM from 'inferno-dom'
import { observable } from 'mobx'
import ContextProvider from './ContextProvider'
import routes from './routes'

const context = {
    state: observable({}),
    store: {}
}
// Render HTML on the browser
InfernoDOM.render(<ContextProvider context={context}>
    {routes}
</ContextProvider>,
document.getElementById('root'))

ReactDOM.render(<Router history={browserHistory}
               render={createElement}
               routes={routes}/>,
document.getElementById('container'))

Author

https://github.com/nightwolfz