React is a view library written in JavaScript, and so it is agnostic of any stack configuration and can make an appearance in practically any web application that is using HTML and JavaScript for its presentation layer.
As React works as the ‘V’ in ‘MVC’, we can create our own application stack from our preferences. So far in this guide we have seen React working with Express, a Node ES6/JavaScript-based framework. Other popular Node-based matches for React are the Meteor framework and Facebook’s Relay.
If you want to take advantage of React’s excellent component-based JSX system, the virtual DOM and its super-fast rendering times with your existing project, you can do so by implementing one of the many open-source solutions.
PHP
As PHP is a server-side scripting language, integration with React can come in several forms:
- Using react-php-v8js
- Server-side Request/Response Route handling (with a router, for example Alto)
- JSON output via json_encode()
- Template wrapping, e.g. Twig
Server-Side Rendering
For rendering React components on the server, there is a library available on GitHub.
For example, we can do the following in PHP
with this package:
<?php // the library $react_source = file_get_contents('/path/to/build/react.js'); // all custom code concatenated $app_source = file_get_contents('/path/to/custom/components.js'); $rjs = new ReactJS($react_source, $app_source); $rjs->setComponent('MyComponent', array( 'any' => 1, 'props' => 2 ) ); // print rendered markup echo '<div id="here">' . $rjs->getMarkup() . '</div>'; // load JavaScript somehow - concatenated, from CDN, etc // including react.js and custom/components.js // init client echo '<script>' . $rjs->getJS("#here") . '</script>'; // repeat setComponent(), getMarkup(), getJS() as necessary // to render more components
The power of combining React with any server-side scripting language is the ability to feed React with data, and apply your business logic on the server as well as the client side. Renovating an old application into a Reactive app has never been easier!
Using PHP + Alto Router
For an example application, take a look at this repository on GitHub.
Configure your AltoRouter
as so:
<?php // Router setup require_once 'include/AltoRouter/AltoRouter.php'; $router = new AltoRouter(); $viewPath = 'views/'; // Router matches //--- // Manual $router->map('GET', '/', $viewPath . 'reactjs.html', 'reactjs'); $result = $viewPath . '404.php'; $match = $router->match(); if($match) { $result = $match['target']; } // Return route match include $result; ?>
With the AltoRouter
setup serving your application’s pages for the routes specified, you can then just include your React
code inside the HTML markup and begin using your components.
JavaScript:
"use strict"; var Comment = React.createClass({ displayName: "Comment", render: function render() { var rawMarkup = marked(this.props.children.toString(), { sanitize: true }); return React.createElement( "div", { className: "comment" }, React.createElement( "h2", { className: "commentAuthor" }, this.props.author ), React.createElement("span", { dangerouslySetInnerHTML: { __html: rawMarkup } }) ); } });
Ensure you include the React libraries and also place the HTML inside the body tag that will be served from your PHP AltoRouter
app, for example:
<!DOCTYPE html> <html> <head> <title>React Example</title> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.0/react.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.13.0/JSXTransformer.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.2/marked.min.js"></script> </head> <body> <div id="myContent"></div> <script type="text/jsx;harmony=true" src="assets/js/main.js"></script> </body> </html>
Laravel Users
For the highly popular PHP framework Laravel, there is the react-laravel
library, which enables React.js from right inside your Blade views.
For example:
@react_component('Message', [ 'title' => 'Hello, World' ], [ 'prerender' => true ])
The prerender
flag tells Laravel to render the component on the server side and then mount it to the client side.
Example Laravel 5.2 + React App
Look at this excellent starter repository for an example of getting Laravel + React working by Spharian.
To render your React code inside your Laravel, set your React files’ source inside the index.blade.php
body tag, by adding the following for example:
<script src="{{ asset('js/my-react-code.js') }}"></script>
.NET
Using the ReactJS.NET framework, you can easily introduce React into your .NET application.
Install the ReactJS.NET package to your Visual Studio IDE via the NuGET package manager for .NET.
Search the available packages for ‘ReactJS.NET (MVC 4 and 5)’ and install. You will now be able to use any .jsx extension code in your asp.net app.
Add a new controller to your project to get started with React + .NET, and select “Empty MVC Controller” for your template. Once it is created, right click on return View()
and add a new view with the following details:
- View name: Index
- View Engine: Razor (CSHTML)
- Create a strongly-typed view: Unticked
- Create as a partial view: Unticked
- Use a layout or master page: Unticked
Now you can replace the default code with the following:
@{ Layout = null; } <html> <head> <title>Hello React</title> </head> <body> <div id="content"></div> <script src="https://fb.me/react-15.0.1.js"></script> <script src="https://fb.me/react-dom-15.0.1.js"></script> <script src="@Url.Content("~/Scripts/Example.jsx")"></script> </body> </html>
Now we need to create the Example.jsx
referenced above, so create the file in your project and add your JSX
as follows:
var CommentBox = React.createClass({ render: function() { return ( <div className="commentBox"> Hello, world! I am a CommentBox. </div> ); } }); ReactDOM.render( <CommentBox />, document.getElementById('content') );
Now if you click Play
in your Visual Studio IDE, you should see the Hello World comment box example.
Here’s a detailed tutorial on writing a component for asp.net.
Rails
By using react-rails
, you can easily add React to any Rails (3.2+) application. To get started, just add the gem:
gem 'react-rails', '~> 1.7.0'
and install:
bundle install
Now you can run the installation script:
rails g react:install
This will result in two things:
- A
components.js
manifest file inapp/assets/javascripts/components/
; this is where you will put all your components code. - Adding the following to your
application.js
:
//= require react //= require react_ujs //= require components
Now .jsx
code will be rendering, and you can add a block of React to your template, for example:
<%= react_component('HelloMessage', name: 'John') %> <!-- becomes: --> <div data-react-class="HelloMessage" data-react-props="{"name":"John"}"></div>
Ruby JSX
Babel is at the heart of the Ruby implementation of the react-rails
gem, and can be configured as so:
config.react.jsx_transform_options = { blacklist: ['spec.functionName', 'validation.react', 'strict'], # default options optional: ["transformerName"], # pass extra babel options whitelist: ["useStrict"] # even more options }
Once react-rails
is installed into your project, restart your server and any .js.jsx
files will be transformed in your asset pipeline.
For more information on react-rails
, go to the official documentation.
Python
To install python-react
, use pip like so:
pip install react
You can now render React code with a Python app by providing the path to your .jsx
components and serving the app with a render server. Usually this is a separate Node.js
process.
To run a render server, follow this easy short guide.
Now you can start your server as so:
node render_server.js
Start your python application:
python app.py
And load up http://127.0.0.1:5000 in a browser to see your React code rendering.
Django
Add react
to your INSTALLED_APPS
and provide some configuration as so:
INSTALLED_APPS = ( # ... 'react', ) REACT = { 'RENDER': not DEBUG, 'RENDER_URL': 'http://127.0.0.1:8001/render', }
Meteor
To add React to your meteor project, do so via:
meteor npm install --save react react-dom
Then in client/main.jsx
add the following for example:
import React from 'react'; import { Meteor } from 'meteor/meteor'; import { render } from 'react-dom'; import App from '../imports/ui/App.jsx'; Meteor.startup(() => { render(<App />, document.getElementById('render-target')); });
This is instantiating an App
React component, which you will define in imports/ui/App.jsx
, for example:
import React, { Component } from 'react'; import Headline from './Headline.jsx'; // The App component - represents the whole app export default class App extends Component { getHeadlines() { return [ { _id: 1, text: 'Legalisation of medical marijuana goes worldwide!' }, { _id: 2, text: 'Matt Brown goes inside the cult of scientology' }, { _id: 3, text: 'The deep web: A criminals dream or fascinating freedom?' }, ]; } renderHeadlines() { return this.getHeadlines().map((headline) => ( <Headline key={headline._id} headline={headline} /> )); } render() { return ( <div className="container"> <header> <h1>The latest headlines</h1> </header> <ul> {this.renderHeadlines()} </ul> </div> ); } }
Inside the Headline.jsx
, you use the following code:
import React, { Component, PropTypes } from 'react'; // Headline component - this will display a single news headline item from a iterated array export default class Headline extends Component { render() { return ( <li>{this.props.headline.text}</li> ); } } Headline.propTypes = { // This component gets the headline to display through a React prop. // We can use propTypes to indicate it is required headline: PropTypes.object.isRequired, };
Meteor is ready for React and has official documentation.
No More {{handlebars}}
An important point to note: When using Meteor with React, the default {{handlebars}}
templating system is no longer used as it is defunct due to React being in the project.
So instead of using {{> TemplateName}}
or Template.templateName
for helpers and events in your JS, you will define everything in your View components, which are all subclasses of React.component
.
Conclusion
React can be used in practically any language which utilises an HTML presentation layer. The benefits of React can be fully exploited by a plethora of potential software products.
React makes the UI View layer become component-based. Working logically with any stack means that we have a universal language for interface that designers across all facets of web development can utilise.
React unifies our projects’ interfaces, branding and general contingency across all deployments, no matter the device or platform restraints. Also in terms of freelance, client-based work or internally inside large organisations, React ensures reusable code for your projects.
You can create your own bespoke libraries of components and get working immediately inside new projects or renovate old ones, creating fully reactive isometric application interfaces quickly and easily.
React is a significant milestone in web development, and it has the potential to become an essential tool in any developer’s collection. Don’t get left behind.
Comments