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

react-legend

v1.0.1

Published

reusable logic creator and global store for react

Downloads

4

Readme

React-legend

#####Questing now done in React

What is React-Legend?

React-Legend is a small library designed to be used with React. Legend is used to create reusable pieces of logic. That logic can then update a global store to update the rest of your React app.

####Legend Life Cycle alt text

#####ActionTypes

What is an ActionType?

An ActionType is predefined logic designed to create reusable code models. Any Quest can then use that ActionType to fire logic.

How is an ActionType created?

Below is a sample ActionType creator that when called will console.log "test".

//first argument is name, second argument is a callback that returns quest information and questData passed in from the Quest
Legend.ActionType('test', function(quest, questData){
	console.log('test');
	quest.next();
});

What is quest.next()?

quest.next() is an alias of quest.updateStore() you can use these to update the store by passing in an object (see store section below).

The ActionType itself is actually automatically coated into a promise. It will only finish and go onto the next action in the quest only when told to. Next() here tells Legend that its completed its action and its ready to move on to the next action. This is useful for any async calls that are made inside of an ActionType.

#####Quests What is a Quest?

A Quest is a method of Legend that will decide what logic is needed to be used. These Quest's take an array of objects that have a type value. Each object in this array is a action that takes place during the Quest. The ActionType (such as defined above) will decide how the first action reaches the second action.

Below is a sample quest creator.

var quest = Legend.NewQuest(
	{
		name: 'testQuest',
		done: function(){
			console.log(Legend.GetStore());
		}
	},
	[
		{
			"type": "test"
		},
		{
			"type": "test"
		}
	]
); //when called will console "test" twice.

#####Store What is the Store?

The store is a object internal to Legend that holds any information you pass to it. This could be one of two ways:

  • using Legend.UpdateStore({something: something}).
  • using quest.updateStore or quest.next() will automatically update the store tells the quest to call the next action.

Notice Legend.UpdateStore() is capitalized to help you know its a static function.

#####With React

var React = require('react');
var ReactDOM = require('react-dom');
var Legend = require('react-legend');

var App = React.createClass({
	componentWillMount: function() {
		// Set any initial store for date
		Legend.UpdateStore({number: 0});
	},
	componentDidMount: function() {
		var _this = this;

		// add one to our number
		Legend.ActionType('addOne', function(quest, questData){
			var store = Legend.GetStore();
			quest.updateStore({number: store.number + 1}); //or next()
		});

		// an action type that re-renders the component
		Legend.ActionType('render', function(quest, questData){
			_this.forceUpdate(); // or setState({})
			quest.next(); //or updateStore()
		});

	},

	// My Button quest, whenever i click on a button i want all the following actions to fire in order (and wait for the first to be done before moving on to the next)
	_btnQuest: Legend.NewQuest(
		{
			name: 'buttonQuest',
			done: function(){
				console.log(Legend.GetStore());
			}
		},
		[
			{
				"type": "addOne"
			},
			{
				"type": "render"
			}
		]
	),
	_onClick: function(){
		Legend.Quest('buttonQuest');
		return false;
	},
	render: function() {
		var store = Legend.GetStore();
		return (
			<div>
				<p>Example Button App</p>
				<button onClick={this._onClick}>Add One</button>
				<p>Number:{store.number}</p>
			</div>
		);
	}
});

ReactDOM.render( <App />, document.getElementById('app'));
  1. In the above example we're creating a react component called app.
  2. We then define our ActionTypes in componentDidMount. We have 2 one for re-rendering our component and one to update the global state to the add one to our number.
  3. Next we set up our first quest inside the react component (not necessary: it could even be in its own file and required or imported). Using Legend.NewQuest();
  4. We call the quest 'buttonQuest' its first argument will be a config object that as of now only takes 2 things. A name and a done callback.
  5. The next argument for _btnQuest is an array of specified actions. Each action is an object that only requires one thing a type. Anything else will be passed into the ActionType creator its defined to (this could be a callback, or any other data).
  6. In our render function we have a button with an onClick that calls a funciton which calls our our Quest.
  7. Whenever we click our button it starts its Quest starting with our addOne ActionType its job is to add one to the number value in the store.
  8. After the number has finished updating we tell our ActionType to move to the next action. The next one it calls will be render which will re-render the component.

#####Misc Should i use state?

Legend is designed to be used with stateless components using the legend store to keep track of all data. However if something doesn't need to be held globally state is fine to use.

I need some examples!

There are some examples in the example folder. These examples show a basic usage of react-legend.

A real working app using React-legend can be found here.