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

nova-flux

v1.3.1

Published

A collection of utilities for using flux with React

Downloads

9

Readme

flux-utils

A collection of utility classes for Flux implementation

Travis Code Climate Test Coverage Issue Count Inch CI

Installing

npm install --save nova-flux

Using

First it's needed to create actions:

ES5:

var flux = require('nova-flux');

// To look more react-like
var MyActions = flux.createActions('createTodo', 'removeTodo');
// To look more classic
var MyActions = new flux.Actions('createTodo', 'removeTodo');

ES6:


import { Actions } from 'nova-flux';

var MyActions = new Actions('createTodo', 'removeTodo');

Actions can be called directly

// Actions can be called directly:
MyActions.createTodo(name, false); // Also, any number of arguments.

Then create an Store to use those actions:

ES5:

var flux = require('nova-flux');

// You ca use flux.createStore also
var MyStore = flux.createStore({
    actions: MyActions,
    methods: {
        addTodo(name, done) {
            let state = this.state; // deep copies it
            state.todos.push({ name, done });
            this.state = state; // Saves the new state and emit changes
        },
        removeTodo() {

        }
    },
    state: { todos: [] }
});

ES6:


import { Store } from 'nova-flux';

// You ca use flux.createStore also
var MyStore = new Store({
    actions: MyActions,
    methods: {
        addTodo(name, done) {
            let state = this.state; // deep copies it
            state.todos.push({ name, done });
            this.state = state; // Saves the new state and emit changes
        },
        removeTodo() {

        }
    },
    state: { todos: [] }
});

Now you can look out for events

When state is changed the event change is automatically fired:

Flux could be used without React but because is popular, here is a React component showing how it works.


class MyComponent extends React.Component {

    // ... More code ...

    onMyStoreChange = () => {
        // when you get the state is deep cloned, 
        // so no worries and no change to modify it.
        this.setState(MyStore.state); 
    }

    componentWillMount() {
        // Adding the handle
        MyStore.events.on('change', this.onMyStoreChange);
    }

    componentWillUnmount() {
        // Remove it when not needed
        MyStore.events.off('change', this.onMyStoreChange);
    }

    // ... More code ...

}

Events are using my custom Event Manager and they are using composition, instead of inheritance.