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

redux-falcor

v3.0.1

Published

A helper library for integratig Redux & Falcor

Downloads

39

Readme

Redux-Falcor

redux-falcor helps connect your Redux applications to your Falcor API.

build status npm version

Change Log

Installation

To install:

npm install --save redux-falcor

Usage

First include redux-falcor in the initial setup of your application.

import { createStore, combineReducers } from 'redux';
import { reducer as falcorReducer } from 'redux-falcor';

const reducers = combineReducers({
  falcor: falcorReducer,
  // Other reducers here
});


const store = finalCreateStore(reducers);

Next attach the FalcorProvider at the top level of your react application.

import { Provider } from 'react-redux';
import { FalcorProvider } from 'redux-falcor';
import { Model } from 'falcor';
import store from './store'; // Your redux store

// The falcor model that redux-falcor will query
const falcor = new Model({
  cache: {
    // Optional data here
  }
});

const application = (
  <Provider store={store}>
    <FalcorProvider store={store} falcor={falcor}>
      {/* The rest here */}
    </FalcorProvider>
  </Provider>
);

React.render(application, document.getElementById('app'));

With that in place we can now connect our components to the falcor-store provided by redux-falcor. This should feel familiar to react-redux.

import React, { Component } from 'react';
import { connect } from 'react-redux';
import { reduxFalcor } from 'redux-falcor';
import App from './App';

class AppContainer extends Component {
  fetchFalcorDeps() {
    return this.props.falcor.get(
      ['currentUser', App.queries.user()],
    );
  }

  handleClick(event) {
    event.preventDefault();

    this.props.falcor.call(['some', 'path']).then(() => {
      console.log('Some path called');
    }).catch(() => {
      console.error('Some path failed');
    });
  }

  render() {
    return (
      <App
        handleClick={this.handleClick.bind(this)}
        currentUser={this.props.currentUser}
      />
    );
  }
}

function mapStateToProps(state) {
  return {
    currentUser: state.falcor.currentUser || {}
  };
}

export default connect(
  mapStateToProps,
)(reduxFalcor(AppContainer));

You can see reduxFalcor has done two things for us. First off, our falcor model has been provided to our Component via the falcor prop. This is useful for creating event handlers that call out to our falcor-router.

Secondly, if we define the method fetchFalcorDeps, redux-falcor will automatically call that function when the component is first mounted to the DOM as well as whenever the falcor cache has been invalidated. This method should return a promise that fetches all of our falcor dependencies for this component.

Warning

Because falcor is intrinsically asynchronous your code can not rely on any one piece of state being present when rendering. In the example above we give a default for currentUser when we haven't fetched that piece of data yet.

Thanks

This library was heavy influenced by @gaearon and his work on react-redux(https://github.com/rackt/react-redux). I would also like to thank @trxcllnt for helping solve some of the problems with earlier versions of redux-falcor. This library would not be as usefull as it is now without his input.

Licence

MIT