:hammer_and_wrench: Flux architecture tools for React

Overview
Fluxxor

Fluxxor is a set of tools to aid in developing React applications with the Flux architecture.

Travis CI

NPM

Installation

Fluxxor is available on npm and works with module bundlers like Browserify and Webpack.

npm install [--save] fluxxor

Standalone browser builds can be downloaded from the GitHub releases page or installed via Bower:

bower install fluxxor

More detailed installation instructions can be found on the Fluxxor website.

Third Party Releases

The following releases are maintained by third parties, and support inquiries should be directed to their maintainers.

WebJar

For JVM languages, there are WebJar packages available on Maven Central and jsDelivr as the following:

SBT/Play Framework 2:

"org.webjars" % "fluxxor" % fluxxorVersion

Maven:

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>fluxxor</artifactId>
    <version>${fluxxor.version}</version>
</dependency>

For detailed instructions, refer to the WebJars documentation. For update requests, open a pull request on the Fluxxor WebJar repository on Github.

Browser Compatibility

Fluxxor is compatible with any ES5-compliant browser (IE 9+, FF 4+, Safari 5.1.4+, Chrome 19+, Opera 12.10+). You can use es5-shim for other browsers.

Documentation

See the Fluxxor website for in-depth documentation, installation instructions, examples, and a getting started guide.

Support and Chat

Get help with and chat about Fluxxor on Gitter.

Gitter chat

License

Fluxxor is licensed under the MIT license.

The MIT License (MIT)

Copyright (c) 2014 Michelle Tilley

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Comments
  • Trigger `this.emit( 'change' );` after dispatch ends

    Trigger `this.emit( 'change' );` after dispatch ends

    I'm using Fluxxor + rackt/react-router and running into the "Cannot dispatch an action (...) while another action (...) is being dispatched" error.

    Here's what I'm doing:

    • A Login route/component displays a login form
    • onSubmit triggers the "login" action creator.
    • The "login" action creator interacts (async) with our API to validate the submission. When the call completes, dispatch the "LOGIN_SUCCESS" action (assume no failures for simplicity)
    • AuthStore is listening for this action and updates its data and triggers an this.emit( 'change' );
    • The Login route/component is using StoreWatchMixin( 'AuthStore' ) to listen for updates and uses react-router to transitionTo( 'dashboard' )
    • During its setup, the "dashboard" route/component triggers an action.
    • The "Cannot dispatch an action..." error is thrown.

    The problem is that the emit call triggers the transition and results in the "dashboard" component set up while the dispatcher thinks that the "LOGIN_SUCCESS" action is still being fired.

    Is there a way to defer the emit call to after the action dispatch is complete? Or should I be thinking of another approach to this? (I could do a setTimeout but that feels fragile.)

    opened by mjangda 13
  • Modular api to satisfy #68

    Modular api to satisfy #68

    This implements a superset of the API mentioned in #68 with addActions/addStores supporting the current object format (and used by the Flux constructor), and addAction/addStore supporting the one-at-a-time notion.

    Flux#addStore takes a name and a store, and adds the store to Flux.

    Flux#addAction takes either an array of namespaces and an action function, or any number of namespaces as strings, and then an action function.

    bindActions was changed to throw when encountering a collision.

    I didn't check in any documentation, but I can do so if you'd prefer that to writing it yourself.

    opened by randallsquared 9
  • Thoughts on explicitly enforcing the Flux pattern

    Thoughts on explicitly enforcing the Flux pattern

    I just wanted to throw some thoughts out there and see what you guys think. Some of these were brought up in #10.

    Removing this.context dependency

    The FluxChildMixin relies on receiving the flux object via this.context which React passes to the components automatically. There are a few good reasons this should be avoided.

    1. Since contexts are intentionally not documented and subject to change, there are a lot of context-related BC's going at the main repo.
    2. Context is only passed to children that are rendered within the render() method. Here's an example of how context gets lost. And cloneWithProps() doesn't copy context or owner. This is problematic since lots of React-based repos use it. For example when using ModalTrigger in react-bootstrap, the context doesn't get passed to the Modal components. To get around this you can explicitly pass in the flux object, but my point is that should be done all the time (see next section). :)
    3. One nice aspect of the "React way" is the explicit idiomatic propagation of dependancies down the component tree. Having a dependency magically handled for you in the background seems to be an anti-pattern to both React's philosophy and the Flux pattern.

    Explicitly passing stores and actions to components

    Since the root controller-view is the only component that needs to watch for changes of the state of the store, the store should be explicitly passed to it exclusively. The actions would be passed as a separate prop (or props) and could be further passed down the component tree exclusively.

    var ChildComponent = React.createClass({
        propTypes: {
            myActions: React.PropTypes.object.isRequired,
            immutableStoreState: React.PropTypes.object.isRequired
        },
        doSomething: function() {
            if(this.props.immutableStoreState.readOnlyThing) {
                return this.props.myActions['FooActions'].someAction();
            }
            return this.props.myActions['FooActions'].someOtherThing();
        },
        render: function() {
            return (
                <div>
                    <h2>Child Component</h2>
                    <p onClick={this.doSomething}>Click me</p>
                </div>
                );
        }
    });
    
    var StoreWatchMixin = Fluxxor.StoreWatchMixin;
    
    var RootControllerView = React.createClass({
        mixins: [StoreWatchMixin("FooStore")],
        propTypes: {
            myStores: React.PropTypes.object.isRequired,
            myActions: React.PropTypes.object.isRequired
        },
        getStateFromFlux: function() {
            return this.props.myStores['FooStore'].getState();
        },
        render: function() {
            return (
                <div>
                    <h1>My App</h1>
                    <ChildComponent myActions={this.props.myActions} immutableStoreState={this.getStateFromFlux()} />
                </div>
                );
        }
    });
    
    var flux = new Fluxxor.Flux(storesObject, actionsObject),
        stores = flux.getStores(),
        actions = flux.getActions();
    
    React.renderComponent(
        <RootControllerView myStores={stores} myActions={actions} />,
        document.getElementById('my-app')
    );
    

    The StoreWatchMixin is really nice since it's pretty strictly Flux and you can learn the "Flux way" of handling the store state by examining the mixin source code.

    This would eliminate the need to have FluxMixin and FluxChildMixin and thus the this.context dependency. We might still need to pass in the flux object for the StoreWatchMixin.

    Fluxxor's Role

    I guess the real question is what role does Fluxxor want to take? Is it designed to help enforce a strict Flux architecture? If so, people who want to better understand Flux by using this package would really benefit from the points above.

    I'd love to hear your thoughts. :)

    opened by SammyK 8
  • Only one action can be dispatched at a time

    Only one action can be dispatched at a time

    Hello and thanks for your work here.

    I've encountered a limitation of the dispatcher implementation that prevents me from having multiple actions being dispatched at the same time. While I think I do understand the reasons behind this limitation, I'd like to be sure to understand them. Could you enlighten me here please?

    Anyway, I changed my code to avoid this but from what I understand from Flux and particularly in the case of various action sources, I will meet them again if I have:

    • view_actions
    • server_actions (xhr)
    • realtime_actions (websocket)

    How can I ensure that there will be one and only one action trigger at a given time since I cannot predict when all those actions are sent? I was thinking of making the dispatcher managing a queue but it's not in the official dispatcher implementation (see http://facebook.github.io/flux/docs/dispatcher.html) so I guess I'm missing something. That's probably something I should ask the React/Flux team though, but you might help me to figure this out.

    opened by jsilvestre 8
  • Updates to jest mock utilties

    Updates to jest mock utilties

    Made some updates to handle some new use cases.

    N.B.: when using jest, you'll sometimes have to jest.dontMock('util'). possibly related to https://github.com/facebook/jest/issues/78

    some usage examples

    // testing actions
    'use strict';
    jest.dontMock('./actions.js');
    describe('Testing actions in isolation', function() {
        var FakeFactory,
            Actions, events;
        beforeEach(function() {
            FakeFactory = require('fluxxor/lib/jest_mock_factory')(jest);
            Actions = FakeFactory.fakeBoundActions(require('./actions'));
            events = require('./events');
        });
        it('when .doFoo() called with group and items, it should call .dispatch() with DO_FOO event and { group: group, items: items }', function() {
            Actions.setGroupWithItems('foo', 'items');
            expect(Actions.dispatch).toBeCalledWith(events.DO_FOO, { group: "foo", items: "items" });
        });
        describe('testing an async action that returns kew module promise', function() {
            var fakeAPI, fakePromise;
            beforeEach(function() {
                fakeAPI = require('./api');
                fakePromise = FakeFactory.fakePromise();
                fakeAPI.getAsyncData.mockReturnValue(fakePromise);
                Actions.doAsyncAction('foo');
            });
            it('should call .dispatch() with START_FETCH event and { group: group }', function() {
                expect(Actions.dispatch).toBeCalledWith(events.START_FETCH, { group: "foo" });
            });
            it('should call API.getAsyncData() with the group', function() {
                expect(fakeAPI.getAsyncData).toBeCalledWith('foo');
            });
            it('when promise resolves with results, it should call .dispatch() with FETCH_SUCCESS event and { group: group, items: results }', function() {
                fakePromise.resolve('results');
                expect(Actions.dispatch).toBeCalledWith(events.FETCH_SUCCESS, { group: "foo", items: "results" });
            });
            it('when promise rejects with error, it should call .dispatch() with FETCH_FAILURE event and { group: group, error: error }', function() {
                fakePromise.reject('error');
                expect(Actions.dispatch).toBeCalledWith(events.FETCH_FAILURE, { group: "foo", error: "error" });
            });
        });
    });
    
    'use strict';
    jest.dontMock('util');
    jest.dontMock('./foo-store.js');
    jest.dontMock('./bar-store.js');
    describe('Testing a store in isolation', function() {
        var FakeFactory,
            FooStore;
        beforeEach(function() {
            FakeFactory = require('fluxxor/lib/jest_mock_factory')(jest);
            FooStore = require('./foo-store');
        });
        it('should be a function', function() {
            expect(ItemsStore).toEqual(jasmine.any(Function));
        });
        describe('after instantiation', function() {
            var fooStore,
                events, otherStores;
            beforeEach(function() {
                fooStore = new FooStore();
                events = require('./events');
                otherStores = {
                    Bars: require('./bar-store')
                };
                FakeFactory.attachFakeFluxToStore(fooStore, otherStores);
            });
            describe('getters', function() {
                it('.getFooValue() should return undefined', function() {
                    expet(fooStore.getFooValue()).toBe(undefined);
                });
                it('.getItems() should return undefined', function() {
                    expect(fooStore.getItems()).toBe(undefined);
                });
            });
            it('when FOO_UPDATED event triggered with payload, it should set .getFooValue() with payload.foo', function() {
                fooStore.__handleAction__({ type: events.FOO_UPDATED, payload: { foo: "foo value" } });
                expect(fooStore.getFooValue()).toBe('foo value');
            });
            it('when BAR_UPDATED event triggered, it should waitFor Bars store and call Bars.getBarValue() with payload and set .getItems() and .emit() "change"', function() {
                stores.Bars.getBarValue.mockReturnValue('bar');
                fooStore.__handleAction__({ type: events.BAR_UPDATED, payload: "payload" });
    
                expect(Barts.getBarValue).toBeCalledWith('payload');
                expect(fooStore.getItems()).toBe('bar');
                expect(fooStore.emit).toBeCalledWith('change');
            });
        });
    });
    
    'use strict';
    jest.dontMock('util');
    jest.dontMock('./store.js');
    jest.dontMock('./child-component.js');
    describe('testing a child component that will be mounted with a parent that has props.flux', function() {
        var React, TestUtils, FakeFactory,
            ChildComponent;
        beforeEach(function() {
            React = require('react/addons');
            TestUtils = React.addons.TestUtils;
            FakeFactory = require('fluxxor/lib/jest_mock_factory')(jest);
    
            ChildComponent = require('./child-component');
        });
        it('should be a React class', function() {
            expect(React.isValidClass(ChildComponent)).toBe(true);
        });
        describe('rendered into document with flux context', function() {
            var flux, stores,
                childComponent;
            beforeEach(function() {
                stores = {
                    MyStore: require('./store')
                };
                flux = FakeFactory.fakeFluxInstance(stores);
                childComponent = FakeFactory.mountFluxChildComponent(React, flux, ChildComponent);
            });
            it('should be a DIV tag', function() {
                expect(childComponent.getDOMNode().tagName).toBe('DIV');
            });
            it('when .getStateFromFlux() called, it should call MyStore.getFoo() and set state.fooValue as its result', function() {
                stores.Filters.getFoo.mockReturnValue('foo');
                var result = childComponent.getStateFromFlux();
                expect(result.fooValue).toBe('foo');
            });
            it('when component is clicked, it should call .stopPropagation() on event and actions.incrementCount()', function() {
                var fakeEvent = FakeFactory.fakeEvent();
                flux.actions = require('./actions');
    
                TestUtils.Simulate.click(childComponent.getDOMNode(), fakeEvent);
    
                expect(fakeEvent.stopPropagation).toBeCalled();
                expect(flux.actions.incrementCount).toBeCalled();
            });
        });
    });
    
    
    opened by awei01 7
  • Guard setState with isMounted

    Guard setState with isMounted

    Firing two actions close together, where one action changes state for a watched store, and the other action results in the removal of the watching component from the DOM, can produce "Error: Invariant Violation: replaceState(...): Can only update a mounted or mounting component." from React. The setState call therefore needs to be guarded even though componentWillUnmount removes the listener.

    I haven't written a test for this, yet.

    opened by randallsquared 7
  • rollback

    rollback

    after quickly browsing the code (good stuff), I can't seem to find anything related to rollbacks. I.e: the ability to rollback to a previous consistent state for all stores, when 1 or more stores fail. Is this something planned / wanted?

    opened by 0xgeert 7
  • Error when using webpack require

    Error when using webpack require

    Im trying to do "var Fluxxor = require('fluxxor');" in one of my files and I get::

    ERROR in ./~/fluxxor/package.json Module parse failed: /Users/seanbrant/Projects/octave/node_modules/fluxxor/package.json Line 2: Unexpected token : You may need an appropriate loader to handle this file type. | { | "name": "fluxxor", | "version": "1.1.1", | "description": "Flux architecture tools for React", @ ./~/fluxxor/index.js 15:11-36

    opened by seanbrant 7
  • Understanding Async Requests

    Understanding Async Requests

    Hi,

    I'm trying to wrap my head around async requests with Fluxxor.

    Is this the correct flow?

    • Component triggers action
    • Store takes action and calls function
    • Function has async operation that results in changed data within store / emit('change') call
    • View re-renders with the new data

    If this is how it works, does the view render BEFORE data is retrieved from an api/server call once, and then again afterwards?

    For example, I'm trying to write a comment component that uses Disqus to display comment threads for posts within a blog app. Without using Fluxxor, I'd pass the post data as props to a Comment component, which would load the Disqus js file/options. But, doing it this way I'd have to deal with somehow making sure I'm not doing anything with the new props before they've been resolved as passed in.

    Does Fluxxor have a good way of dealing with this async passing of data between components? Would I want my Post component to trigger an action that results in data in the store, which the Comment component then pulls from? How can I ensure that the Comment component is only loading data from the store once it's been resolved?

    • Post component triggers action
    • Store takes action and makes API call
    • Store stores data from result and triggers change event
    • View re-renders
    • Child component is triggered to render (??)

    In my specific case, if the child component renders before the data has finished resolving, the comments won't load correctly, even if it's rendered again with new data a second later.

    opened by jrogozen 6
  • Better alternative to webpack

    Better alternative to webpack

    I was wondering if webpack is the best approach to build this library. I looked at the build file generated and looks really bloated by webpack's declarations. Also I think it is better to express external dependencies rather than bundled it together.

    What do you think of we refactor the code and use some structure that enables use with CommonJS and AMD, but keeping the simplicity of the library. The source has only 7 files, with nearly 300 lines, excluding lodash functions. Maybe simply use UMD and expressing an external dependency on lodash code is the best way to go.

    What do you think?

    opened by rwillrich 6
  • Allow injection of a dispatch wrapper

    Allow injection of a dispatch wrapper

    React automatically batches updates when inside a synthetic event handler, but asynchronous updates do not get the same treatment. Consider the following scenario:

    1. A button in ComponentA calls an action creator
    2. The action creator calls an async API
    3. As a result of the async call, the action creator dispatches an action
    4. That action sets new state in a store
    5. The new store data causes a new child to be mounted inside ComponentA (let's call it ComponentB)
    6. ComponentB fires an action immediately, via componentDid/WillMount

    Unlike re-renders from synchronous action dispatches (which generally happen in the context of a synthetic event), asynchronous dispatches aren't called within the context of React's batching strategy. This means the dispatch loop is still in progress when ComponentB mounts, causing a cascading dispatch exception.

    Flux#setDispatchWrapper allows you to pass a function to wrap dispatches in; in most (all?) cases, you'll want to pass React.addons.batchedUpdates (or some custom function that calls it) in order to force all dispatches to happen in the context of React's batched updates.

    Fixes #92

    opened by BinaryMuse 5
  • Bump object-path from 0.6.0 to 0.11.5

    Bump object-path from 0.6.0 to 0.11.5

    Bumps object-path from 0.6.0 to 0.11.5.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump react from 0.13.3 to 15.6.2

    Bump react from 0.13.3 to 15.6.2

    Bumps react from 0.13.3 to 15.6.2.

    Release notes

    Sourced from react's releases.

    v15.6.2

    15.6.2 (September 25, 2017)

    All Packages

    • Switch from BSD + Patents to MIT license

    React DOM

    • Fix a bug where modifying document.documentMode would trigger IE detection in other browsers, breaking change events. (@aweary in #10032)
    • CSS Columns are treated as unitless numbers. (@aweary in #10115)
    • Fix bug in QtWebKit when wrapping synthetic events in proxies. (@walrusfruitcake in #10115)
    • Prevent event handlers from receiving extra argument in development. (@aweary in #10115)
    • Fix cases where onChange would not fire with defaultChecked on radio inputs. (@jquense in #10156)
    • Add support for controlList attribute to DOM property whitelist (@nhunzaker in #9940)
    • Fix a bug where creating an element with a ref in a constructor did not throw an error in development. (@iansu in #10025)

    v15.6.1

    15.6.1 (June 14, 2017)

    React DOM

    v15.6.0

    15.6.0 (June 13, 2017)

    React

    • Downgrade deprecation warnings to use console.warn instead of console.error. (@flarnie in #9753)
    • Add a deprecation warning for React.createClass. Points users to create-react-class instead. (@flarnie in #9771)
    • Add deprecation warnings and separate module for React.DOM factory helpers. (@nhunzaker in #8356)
    • Warn for deprecation of React.createMixin helper, which was never used. (@aweary in #8853)

    React DOM

    • Add support for CSS variables in style attribute. (@aweary in #9302)
    • Add support for CSS Grid style properties. (@ericsakmar in #9185)
    • Fix bug where inputs mutated value on type conversion. (@nhunzaker in #9806)
    • Fix issues with onChange not firing properly for some inputs. (@jquense in #8575)
    • Fix bug where controlled number input mistakenly allowed period. (@nhunzaker in #9584)
    • Fix bug where performance entries were being cleared. (@chrisui in #9451)

    React Addons

    • Fix AMD support for addons depending on react. (@flarnie in #9919)
    • Fix isMounted() to return true in componentWillUnmount. (@mridgway in #9638)
    • Fix react-addons-update to not depend on native Object.assign. (@gaearon in #9937)
    • Remove broken Google Closure Compiler annotation from create-react-class. (@gaearon in #9933)
    Changelog

    Sourced from react's changelog.

    15.6.2 (September 25, 2017)

    All Packages

    • Switch from BSD + Patents to MIT license

    React DOM

    • Fix a bug where modifying document.documentMode would trigger IE detection in other browsers, breaking change events. (@aweary in #10032)
    • CSS Columns are treated as unitless numbers. (@aweary in #10115)
    • Fix bug in QtWebKit when wrapping synthetic events in proxies. (@walrusfruitcake in #10115)
    • Prevent event handlers from receiving extra argument in development. (@aweary in #10115)
    • Fix cases where onChange would not fire with defaultChecked on radio inputs. (@jquense in #10156)
    • Add support for controlList attribute to allowed DOM properties (@nhunzaker in #9940)
    • Fix a bug where creating an element with a ref in a constructor did not throw an error in development. (@iansu in #10025)

    15.6.1 (June 14, 2017)

    React DOM

    15.6.0 (June 13, 2017)

    React

    • Downgrade deprecation warnings to use console.warn instead of console.error. (@flarnie in #9753)
    • Add a deprecation warning for React.createClass. Points users to create-react-class instead. (@flarnie in #9771)
    • Add deprecation warnings and separate module for React.DOM factory helpers. (@nhunzaker in #8356)
    • Warn for deprecation of React.createMixin helper, which was never used. (@aweary in #8853)

    React DOM

    • Add support for CSS variables in style attribute. (@aweary in #9302)
    • Add support for CSS Grid style properties. (@ericsakmar in #9185)
    • Fix bug where inputs mutated value on type conversion. (@nhunzaker in #9806)
    • Fix issues with onChange not firing properly for some inputs. (@jquense in #8575)
    • Fix bug where controlled number input mistakenly allowed period. (@nhunzaker in #9584)
    • Fix bug where performance entries were being cleared. (@chrisui in #9451)

    React Addons

    • Fix AMD support for addons depending on react. (@flarnie in #9919)
    • Fix isMounted() to return true in componentWillUnmount. (@mridgway in #9638)
    • Fix react-addons-update to not depend on native Object.assign. (@gaearon in #9937)
    • Remove broken Google Closure Compiler annotation from create-react-class. (@gaearon in #9933)
    • Remove unnecessary dependency from react-linked-input. (@gaearon in #9766)
    • Point react-addons-(css-)transition-group to the new package. (@gaearon in #9937)

    15.5.4 (April 11, 2017)

    Commits
    Maintainer changes

    This version was pushed to npm by sophiebits, a new releaser for react since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump lodash from 3.10.1 to 4.17.19

    Bump lodash from 3.10.1 to 4.17.19

    Bumps lodash from 3.10.1 to 4.17.19.

    Release notes

    Sourced from lodash's releases.

    4.17.16

    4.0.0

    lodash v4.0.0

    2015 was big year! Lodash became the most depended on npm package, passed 1 billion downloads, & its v3 release saw massive adoption!

    The year was also one of collaboration, as discussions began on merging Lodash & Underscore. Much of Lodash v4 is proofing out the ideas from those discussions. Lodash v4 would not be possible without the collaboration & contributions of the Underscore core team. In the spirit of merging our teams have blended with several members contributing to both libraries.

    For 2016 & lodash v4.0.0 we wanted to cut loose, push forward, & take things up a notch!

    Modern only

    With v4 we’re breaking free from old projects, old environments, & dropping old IE < 9 support!

    4 kB Core

    Lodash’s kitchen-sink size will continue to grow as new methods & functionality are added. However, we now offer a 4 kB (gzipped) core build that’s compatible with Backbone v1.2.4 for folks who want Lodash without lugging around the kitchen sink.

    More ES6

    We’ve continued to embrace ES6 with methods like _.isSymbol, added support for cloning & comparing array buffers, maps, sets, & symbols, converting iterators to arrays, & iterable _(…).

    In addition, we’ve published an es-build & pulled babel-plugin-lodash into core to make tree-shaking a breeze.

    More Modular

    Pop quiz! 📣

    What category path does the bindAll method belong to? Is it

    A) require('lodash/function/bindAll') B) require('lodash/utility/bindAll') C) require('lodash/util/bindAll')

    Don’t know? Well, with v4 it doesn’t matter because now module paths are as simple as

    var bindAll = require('lodash/bindAll');
    

    We’ve also reduced module complexity making it easier to create smaller bundles. This has helped Lodash adoption with libraries like Async & Redux!

    1st Class FP

    With v3 we introduced lodash-fp. We learned a lot & with v4 we decided to pull it into core.

    Now you can get immutable, auto-curried, iteratee-first, data-last methods as simply as

    Commits
    Maintainer changes

    This version was pushed to npm by mathias, a new releaser for lodash since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Typo in a link on the

    Typo in a link on the "What is Flux" page

    There is a typo in a link on the "What is Flux" page, in "Further Reading" section: For a more in-depth look at the Flux architecture, check out Flux Application Architecture ....

    There is a ".html" in the link, but it should be "/": current link => http://facebook.github.io/flux/docs/overview.html correct link => http://facebook.github.io/flux/docs/overview/

    Thanks!

    opened by DaniloGimenez 0
  • Compatibility with React 16

    Compatibility with React 16

    Since React has deprecated PropTypes, are there any plans to upgrade Fluxxor to use the new paradigm? Would love to continue using it, just getting tons of errors related to PropTypes.

    I'd be happy to give it a shot, not sure how successful I'll be.

    Thanks!

    opened by Osmosis311 2
Releases(1.7.3)
Owner
Michelle Tilley
I flip bits on and off @GitHub :computer:
Michelle Tilley
Isomorphic flux implementation

alt Check out the API Reference for full in-depth docs. For a high-level walk-through on flux, take a look at the Getting Started guide. What follows

Josh Perez 3.5k Nov 23, 2022
A pluggable container for universal flux applications.

Fluxible This repository is the home of Fluxible and related libraries. For support, join our gitter.im channel. Development Development is currently

Yahoo 1.8k Nov 20, 2022
React integration for Baobab.

baobab-react Welcome to baobab's React integration (from v2.0.0 and onwards). Implemented patterns: Hooks Higher order components (curried so also usa

Guillaume Plique 309 Sep 29, 2022
[UNMAINTAINED] Reactive state and side effect management for React using a single stream of actions

Flexible state and side effect manager using RxJS for React. About Fluorine provides you with easy, reactive state and side effect management, accumul

Phil Pluckthun 285 Nov 20, 2022
React bindings for MobX

mobx-react ?? ?? ?? This repo has been moved to mobx Package with React component wrapper for combining React with MobX. Exports the observer decorato

MobX 4.8k Nov 30, 2022
A performant, scalable and pluggable approach to instrumenting your React application.

react-i13n react-i13n provides a performant, scalable and pluggable approach to instrumenting your React application. Typically, you have to manually

Yahoo 347 Dec 3, 2022
Official React bindings for Redux

React Redux Official React bindings for Redux. Performant and flexible. Installation Using Create React App The recommended way to start new apps with

Redux 22.5k Dec 2, 2022
Declarative data-fetching and caching framework for REST APIs with React

resourcerer resourcerer is a library for declaratively fetching and caching your application's data. Its powerful useResources React hook or withResou

Noah Grant 75 Jun 24, 2022
Dead simple + opinionated toolkit for building redux/react applications

Simple opinionated toolkit for building applications using React, Redux, and Immutable.js You're early! There is sparse documentation, no tests, and i

shasta (archive) 517 Sep 29, 2022
keepalive-react-component是一个react缓存组件

基于react开发出来的react缓存组件,类似于类似vue的keepalive包裹vue-router的效果功能

null 23 Sep 30, 2022
how to use react ddd with TODO

分析你的应用有哪些功能,功能之间有哪些关系 要花费 2-3 倍的时间 人没有办法做出一个自己都不了解的东西,即便你用 分层架构 即刻开始写,这些问题也只是延迟出现,一旦出现,反而会更加难以调试,甚至完全不可用 useXxxService 是自定义服务,useXxx 一般是第三方,比如 useRequ

Prajna 16 May 5, 2022
COVID-19 Data: built with react and redux by using a public covid api

COVID-19 Data This is a React module capstone project. It is built with react and redux by using a public covid api. Screenshot Live Demo Live Link Vi

Tarikwa Tesfa 11 Jun 3, 2022
A simple library for uni-directional dataflow application architecture with React extensions inspired by Flux

RefluxJS A simple library for unidirectional dataflow architecture inspired by ReactJS Flux. Installation You can currently install the package as a n

null 5.4k Nov 19, 2022
A simple library for uni-directional dataflow application architecture with React extensions inspired by Flux

RefluxJS A simple library for unidirectional dataflow architecture inspired by ReactJS Flux. Installation You can currently install the package as a n

null 5.4k Dec 1, 2022
Boilerplate for react universal (isomorphic) application based on flux architecture (redux implementation)

Redux universal boilerplate Boilerplate for react universal application building on flux architecture based on redux implementation. Boilerplate based

Sergey 73 Mar 30, 2022
Cristian Alejandro 12 Nov 27, 2022
A react-native-drawer implemented example and scaffolding for react-native-router-flux.

Deprecated - This repo uses obsolete versions of react-native-router-flux and react-native-drawer. I update the repo for now. But I may not update on

null 50 Feb 14, 2022
Supercharge your react app with simple Flux-pattern based Global State, using react owns `useReducer` and eliminate the need for redux!

Supercharge your react app with simple Flux-pattern based Global State, using react owns `useReducer` and eliminate the need for redux!

EthicDevs 2 Aug 26, 2022
Make your app reactive with MobX and react-native-router-flux

Package is obsolete with latest react-native-router-flux v4 - RNRF allows now wrapping all scenes and navbar by passing wrapBy param (equal to MobX ob

Pavel Aksonov 223 Oct 4, 2022
A demo of React-Native + Flux(Alt) + ES6

react-native-alt-demo Type in a location and see a stream of the most recent tweets for that location. This application demos Alt/Flux and integration

Jonathan Huang 103 Feb 14, 2022