Git Product home page Git Product logo

express-react-router-views's Introduction

#express-react-router-views

What is it?

  • a react render engine for express js
  • renders both backend and frontend views using react-router

Install

npm install express-react-router-views react react-dom react-router history express --save

Usage on the server side

var express = require('express');
var ExpressReactRouter = require('express-react-router-views');

var routes = require('./routes'); // This are react-router routes, check the example of a routes file below

var app = express();
// Set the engine as .jsx or .js
app.engine('.jsx', ExpressReactRouter.engine({
  routes: routes
}));

// Set the view engine as jsx or js
app.set('view engine', 'jsx');

// Set the custom view
app.set('view', ExpressReactRouter.view);

Routes example

var React = require('react');
var ReactRouter = require('react-router');
var Layout = require('./components/layout.jsx');
var Index = require('./components/index.jsx');
var About = require('./components/about.jsx');

var Route = ReactRouter.Route;
var IndexRoute = ReactRouter.IndexRoute;

module.exports = (
  <Route path="/" component={Layout}>
    <IndexRoute component={Index}/>
    <Route path="/about" component={About}/>
  </Route>
);

Rendering views on server side

app.get('/*', function(req, res) {
  // You can replace req.url with the view path that you've set on the routes file
  res.render(req.url);
});

Usage On Client Side

// assuming we use `browserify`
var client = require('express-react-router-views').client;

var routes = require('./routes'); // Same file used on the server side

client.render({
  routes: routes
});

Layout example

var React = require('react');
var ReactRouter = require('react-router');
var client = require('express-react-router-views').client;
var Link = ReactRouter.Link;
var IndexLink = ReactRouter.IndexLink;

var ACTIVE = { color: 'red' };

var Layout = React.createClass({
  render: function render() {
    return (
      <html lang="en">
      <head>
        <meta charSet="UTF-8" />
        <title>{ client.getProps().title }</title>
      </head>
      <body>
        <h1>APP!</h1>
        <ul>
          <li><Link      to="/"           activeStyle={ACTIVE}>/</Link></li>
          <li><IndexLink to="/"           activeStyle={ACTIVE}>/ IndexLink</IndexLink></li>

          <li><Link      to="/about"      activeStyle={ACTIVE}>/about</Link></li>
        </ul>

        { this.props.children && React.cloneElement(this.props.children, client.getProps())}
        <script src="/main.js"></script>
      </body>
      </html>
    );
  }
});

module.exports = Layout;

client.getProps() grabs the properties set from the server side, so when you do { this.props.children && React.cloneElement(this.props.children, client.getProps())} you're passing them to the props of any children.

Note

This package was built using the latest react react-dom and react-router. I'll try to update it as fast as I can when new versions come out. That means that maybe some features will change in the future, but this Readme would update accordingly containing the changes between versions.

express-react-router-views's People

Contributors

dpr00f avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

express-react-router-views's Issues

Provided a deprecated history object to <Router/>

Hello,

Thanks for making this. Any idea how this warning can be resolved:

Warning: [react-router] It appears you have provided a deprecated history object to <Router/>, please use a history provided by React Router with import { browserHistory } from 'react-router' or import { hashHistory } from 'react-router'. If you are using a custom history please create it with useRouterHistory, see http://tiny.cc/router-usinghistory for details.

It seems to be working fine otherwise.

Edit: Looks like [email protected] causes this.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.