Skip to main content

React-LocalStorage

Simply synchronize a component's state with localStorage, when available.

Usage

A simple component:
 var React = require('react');  
 var LocalStorageMixin = require('react-localstorage');  
 var TestComponent = module.exports = React.createClass({  
  displayName: 'TestComponent',  
  // This is all you need to do  
  mixins: [LocalStorageMixin],  
  getInitialState: function() {  
   return {counter: 0};  
  },  
  onClick: function() {  
   this.setState({counter: this.state.counter + 1});  
  },  
  render: function() {  
   return (  
    <span onClick={this.onClick}>{this.state.counter}</span>  
   );  
  }  
 });  

Options

The key that state is serialized to under localStorage is chosen with the following code:
 function getLocalStorageKey(component) {  
  if (component.getLocalStorageKey) return component.getLocalStorageKey();  
  if (component.props.localStorageKey === false) return false;  
  if (typeof component.props.localStorageKey === 'function') return component.props.localStorageKey.call(component);  
  return component.props.localStorageKey || getDisplayName(component) || 'react-localstorage';  
 }  
If you are synchronizing multiple components with the same displayName to localStorage, you must set a unique localStorageKey prop on the component. You may set a function as well.
Alternatively, you may define the method getLocalStorageKey on the component's prototype. This gives you the freedom to choose keys depending on the component's props or state.
To disable usage of localStorage entirely, pass false or a function that evaluates to false.

Filtering

If you only want to save parts of state in localStorage, set stateFilterKeys to an array of strings corresponding to the state keys you want to save.
 getDefaultProps: function() {  
  return {  
   stateFilterKeys: ['one', 'two']  
  };  
 }  
You can do this by setting a stateFilterKeys prop or define the method getStateFilterKeys on the component's prototype.
 getStateFilterKeys: function() {  
  return ['one', 'two'];  
 }  

Server Rendering

LocalStorageMixin will call setState on componentDidMount, so it will not break server rendering checksums. This is new as of 0.2.0.

Tests

We use karma as the test runner. To run the test, simply npm install all the dependencies and run:
 ./node_modules/karma/bin/karma start  


Note: Special thanks to Samuel Reed

Contact Me: sam@bitmex.com

Disclaimer: The blog is created to share react components information to geek, curious ReactJS Developers.

Comments

Popular posts from this blog

react-bootstrap

Bootstrap 3 components built with React https://react-bootstrap.github.io/ Docs See the documentation with live editable examples. Related modules react-router-bootstrap – Integration with React Router React Bootstrap Extended - A version of React Bootstrap where each component has extra props that map to bootstrap's utility classes. For example, pullRight adds the class pull-right to a component. Local setup Install the dependencies with npm install Run tests npm test Run tests in watch mode npm run tdd Run the docs site in development mode with npm run docs. This will watch for file changes as you work. Simply refresh the page to see the updates. Build with npm run build Note: Special thanks to react-bootstrap Contact Me - mtscout6+react-bootstrap@gmail.com Disclaimer: The blog is created to share react components information to geek, curious ReactJS Developers.

Declarative router component for React.

http://strml.viewdocs.io/react-router-component Project Overview Usage is as simple as just returning a configured router component from your component's render() method: <Locations> <Location path="/" handler={MainPage} /> <Location path="/users/:username" handler={UserPage} /> <Location path="/search/*" handler={SearchPage} /> <Location path={/\/product\/([0-9]*)/} handler={ProductPage} /> </Locations> Having routes defined as a part of your component hierarchy allows to dynamically reconfigure routing based on your application state. For example you can return a different set of allowed locations for anonymous and signed-in users. React router component can dispatch based on location.pathname or location.hash if browser doesn't support History API (see hash routing ). Props can be passed through the router by setting them directly on each , or to all possible routes via a childPro...

React CSS components

Motivation Define React presentational components with CSS (or even SASS or Less if you like). The implementation is based on CSS modules. In fact React CSS Components is just a thin API on top of CSS modules. NOTE: The current implementation is based on Webpack but everything is ready to be ported onto other build systems (generic API is here just not yet documented). Raise an issue or better submit a PR if you have some ideas. Installation & Usage Install from npm: npm install react-css-components style-loader css-loader Configure in webpack.config.js: module.exports = { ... module: { loaders: [ { test: /\.react.css$/, loader: 'react-css-components', } ] } ... } Now you can author React components in Styles.react.css: Label { color: red; } Label:hover { color: white; } And consume them like regular React components: import {Label} from './styles.react.css' <Lab...