0.0.2 • Published 10 years ago

single-page-react v0.0.2

Weekly downloads
3
License
MIT
Repository
github
Last release
10 years ago

single-page-react

A lightweight, straightforward plugin for creating single page apps with ReactJS.

##Concept

Making a single page app built with React doesn't need to be complicated. There's no need to bring in Backbone and Underscore if you don't want to.

##What single-page-react does

single-page-react chooses one of your React components and inserts it into the DOM.

#####Which React component is inserted into the DOM?

The one whose route attribute matches the current URL hash.

#####Where in the DOM will my React component by inserted?

Into the element whose id is stored in the React.Router.routedElement variable. By default, this is document.body.

#####What happens when I change the page's hash?

single-page-react will replace the React component inside of routedElement with the React component whose route attribute matches the hash. Take advantage of React virtual DOM diffing by reusing components; this way re-routing can be almost instantaneous!

#####Can I pass variables to my routedElement?

Yes. The key-value pairs in the URL query are given to your React component via the this.props variable.

##Example

home.jsx /* @jsx React.DOM /

var Home = React.createClass({
	render: function() {
		return (
			<div>
				{this.props.prop1}
			</div>
		);
	},

  //When the URL hash is '#home', mount this component into the routedElement.
	route: 'home' 
});

index.html

<html>
	<head>
		
		<!-- Bring in React and single-page-react dependencies as globals -->
		<script src="//cdnjs.cloudflare.com/ajax/libs/react/0.11.1/react.js"></script>
		<script src="//cdnjs.cloudflare.com/ajax/libs/react/0.11.1/JSXTransformer.js"></script>
		<script src="single-page-react.js"></script>
	  
		<!-- Set which DOM element to insert React components into -->
		<script>
  			React.Router.routedElement = document.body //or whatever element you prefer
    </script>  
		<script src="home.jsx" type="text/jsx"></script>
		
	</head>

	<body>
		This text is replaced by routed React components. For example, when the url 
		ends with #home?prop1=customValue, this text will be replaced by a div whose
		content is 'customValue'
	</body>
</html>