In today’s world of Javascript Application frameworks, design philosophy is the key differentiating factor. If you compare the popular JS frameworks, such as EmberJS, AngularJS, Backbone, Knockout, etc. you are sure to find differences in their abstractions, thinking models, and of course the terminology. This is a direct consequence of the underlying design philosophy. But, in principle, they all do one thing, which is to abstract out the DOM in such a way that you don’t deal directly with HTML Elements.
I personally think that a framework becomes interesting when it provides a set of abstractions that enable a different mode of thinking. In this aspect, react, the new JS framework from the folks at Facebook, will force you to rethink (to some extent) how you decompose the UI and interactions of your application. Having reached version 0.4.1 (as of this writing), React provides a surprisingly simple, yet effective model for building JS apps that mixes a delightful cocktail of a different kind.
In this article, we’ll explore the building blocks of React and embrace a style of thinking that may seem counter-intuitive on the first go. But, as the React docs say: “Give it Five Minutes” and then you will see how this approach will become more natural.
The story of React started within the confines of Facebook, wherein it brew for a while. Having reached a stable-enough state, the developers decided to open-source it a few months back. Interestingly the Instagram website is also powered by the React Framework.
React approaches the DOM-abstraction problem with a slightly different take. To understand how this is different, lets quickly gloss over the techniques adopted by the frameworks I mentioned earlier.
The MVC (Model-View-Controller) design pattern is fundamental to UI development, not just in web apps, but in front-end applications on any platform. In case of web apps, the DOM is the physical representation of a View. The DOM itself is generated from a textual html-template that is pulled from a different file, script-block or a precompiled template function. The View
is an entity that brings the textual template to life as a DOM fragment. It also sets up event-handlers and takes care of manipulating the DOM tree as part of its lifecycle.
For the View
to be useful, it needs to show some data, and possibly allow user interaction. The data is the Model
, which comes from some data-source (a database, web-service, local-storage, etc.). Frameworks provide a way of “binding” the data to the view, such that changes in data are automatically reflected with changes on the view. This automatic process is called data-binding and there are APIs/techniques to make this as seamless as possible.
The MVC triad is completed by the Controller
, which engages the View
and the Model
and orchestrates the flow of data (Model
) into the View
and user-events out from the View
, possibly leading to changes in the Model
.
Frameworks that automatically handle the flow of data back and forth between the View and Model maintain an internal event-loop. This event-loop is needed to listen to certain user events, data-change events, external triggers, etc and then determine if there is any change from the previous run of the loop. If there are changes, at either end (View or Model), the framework ensures that both are brought back in sync.
With React, the View-part of the MVC triad takes prominence and is rolled into an entity called the Component
. The Component maintains an immutable property bag called props
, and a state
that represents the user-driven state of the UI. The view-generation part of the Component
is rather interesting and possibly the reason that makes React stand out compared to other frameworks. Instead of constructing a physical DOM directly from a template file/script/function, the Component
generates an intermediate DOM that is a stand-in for the real HTML DOM. An additional step is then taken to translate this intermediate DOM into the real HTML DOM.
As part of the intermediate DOM generation, the Component
also attaches event-handlers and binds the data contained in props
and state
.
React cleverly adopts this strategy to create an intermediate DOM before generating the final HTML DOM. The intermediate-DOM is just a JavaScript object graph and is not rendered directly. There is a translation step that creates the real DOM. This is the underlying technique that makes React do fast DOM manipulations.
To get a better picture of how React makes it all work, let’s dive a little deeper; starting with the Component
. The Component is the primary building block in React. You can compose the UI of your application by assembling a tree of Components. Each Component provides an implementation for the render()
method, where it creates the intermediate-DOM. Calling React.renderComponent()
on the root Component results in recursively going down the Component-tree and building up the intermediate-DOM. The intermediate-DOM is then converted into the real HTML DOM.
Since the intermediate-DOM creation is an integral part of the Component, React provides a convenient XML-based extension to JavaScript, called JSX, to build the component tree as a set of XML nodes. This makes it easier to visualize and reason about the DOM. JSX also simplifies the association of event-handlers and properties as xml attributes. Since JSX is an extension language, there is a tool (command-line and in-browser) to generate the final JavaScript. A JSX XML node maps directly to a Component. It is worth pointing out that React works independent of JSX and the JSX language only makes it easy to create the intermediate DOM.
The core React framework can be downloaded from their website. Additionally, for the JSX → JS transformation, you can either use the in-browser JSXTransformer or use the command line tool, called react-tools (installed via NPM). You will need an installation of Node.js to download it. The command-line tool allows you to precompile the JSX files and avoid the translation within the browser. This is definitely recommended if your JSX files are large or many in number.
Alright, we have seen a lot of theory so far, and I am sure you are itching to see some real code. Let’s dive into our first example:
/** @jsx React.DOM */ var Simple = React.createClass({ getInitialState: function(){ return { count: 0 }; }, handleMouseDown: function(){ alert('I was told: ' + this.props.message); this.setState({ count: this.state.count + 1}); }, render: function(){ return <div> <div class="clicker" onMouseDown={this.handleMouseDown}> Give me the message! </div> <div class="message">Message conveyed <span class="count">{this.state.count}</span> time(s)</div> </div> ; } }); React.renderComponent(<Simple message="Keep it Simple"/>, document.body);
Although simple, the code above does cover a good amount of the React surface area:
React.createClass
and passing in an object that implements some core functions. The most important one is the render()
, which generates the intermediate-DOM.{}
syntax is useful for incorporating JavaScript expressions for attributes (onMouseDown={this.handleClick}
) and child-nodes (<span class="count">{this.state.count}</span>
). Event handlers associated using the {} syntax are automatically bound to the instance of the component. Thus this
inside the event-handler function refers to the component instance. The comment on the first line /** @jsx React.DOM */
is a cue for the JSX transformer to do the translation to JS. Without this comment line, no translation will take place.We can run the command-line tool (jsx) in watch mode and auto-compile changes from JSX → JS. The source files are in /src folder and the output is generated in /build.
jsx --watch src/ build/
Here is the generated JS file:
/** @jsx React.DOM */ var Simple = React.createClass({displayName: 'Simple', getInitialState: function(){ return { count: 0 }; }, handleMouseDown: function(){ alert('I was told: ' + this.props.message); this.setState({ count: this.state.count + 1}); }, render: function(){ return React.DOM.div(null, React.DOM.div( {className:"clicker", onMouseDown:this.handleMouseDown}, " Give me the message! " ), React.DOM.div( {className:"message"}, "Message conveyed ", React.DOM.span( {className:"count"}, this.state.count), " time(s)") ) ; } }); React.renderComponent(Simple( {message:"Keep it Simple"}), document.body);
Notice how the <div/>
and <span/>
tags map to instances of React.DOM.div
and React.DOM.span
.
handleMouseDown
, we make use of this.props
to read the message property that was passed in. We set the message on the last line of the snippet, in the call to React.renderComponent()
where we create the <Simple/>
component. The purpose of this.props
is to store the data that was passed in to the component. It is considered immutable and only a higher-level component is allowed to make changes and pass it down the component tree.handleMouseDown
we also set some user state with this.setState()
to track the number of times the message was displayed. You will notice that we use this.state
in the render()
method. Anytime you call setState()
, React also triggers the render()
method to keep the DOM in sync. Besides React.renderComponent()
, setState()
is another way to force a visual refresh.The events exposed on the intermediate-DOM, such as the onMouseDown
, also act as a layer of indirection before they get set on the real-DOM. These events are thus refered to as Synthetic Events. React adopts event-delegation, which is a well-known technique, and attaches events only at the root-level of the real-DOM. Thus there is only one true event-handler on the real-DOM. Additionally these synthetic events also provide a level of consistency by hiding browser and element differences.
The combination of the intermediate-DOM and synthetic events gives you a standard and consistent way of defining UIs across different browsers and even devices.
Components in the React framework have a specific lifecycle and embody a state-machine that has three distinct states.
The Component comes to life after being Mounted. Mounting results in going through a render-pass that generates the component-tree (intermediate-DOM). This tree is converted and placed into a container-node of the real DOM. This is a direct outcome of the call to React.renderComponent()
.
Once mounted, the component stays in the Update state. A component gets updated when you change state using setState()
or change props using setProps()
. This in turn results in calling render()
, which brings the DOM in sync with the data (props
+ state
). Between subsequent updates, React will calculate the delta between the previous component-tree and the newly generated tree. This is a highly optimized step (and a flagship feature) that minimizes the manipulation on the real DOM.
The final state is Unmounted. This happens when you explicitly call React.unmountAndReleaseReactRootNode()
or automatically if a component was a child that was no longer generated in a render()
call. Most often you don’t have to deal with this and just let React do the proper thing.
Now it would have been a big remiss, if React didn’t tell you when it moved between the Mounted-Update-Unmounted states. Thankfully that is not the case and there are hooks you can override to get notified of lifecycle changes. The names speak for themselves:
getInitialState()
: prepare initial state of the ComponentcomponentWillMount()
componentDidMount()
componentWillReceiveProps()
shouldComponentUpdate()
: useful if you want to control when a render should be skipped.componentWillUpdate()
render()
componentDidUpdate()
componentWillUnmount()
The componentWill*
methods are called before the state change and the componentDid*
methods are called after.
Within a component-tree, data should always flow down. A parent-component should set the props
of a child-component to pass any data from the parent to the child. This is termed as the Owner-Owned pair. On the other hand user-events (mouse, keyboard, touches) will always bubble up from the child all the way to the root component, unless handled in between.
When you create the intermediate-DOM in render()
, you can also assign a ref
property to a child component. You can then refer to it from the parent using the refs
property. This is depicted in the snippet below.
render: function(){ // Set a ref return <div> <span ref="counter" class="count">{this.state.count}</span> </div>; } handleMouseDown: function(){ // Use the ref console.log(this.refs.counter.innerHTML); },
As part of the component metadata, you can set the initial-state (getInitialState()
), which we saw earlier within the lifecycle methods. You can also set the default values of the props with getDefaultProps()
and also establish some validation rules on these props using propTypes
. The docs give a nice overview of the different kinds of validations (type checks, required, etc.) you can perform.
React also supports the concept of a Mixin to extract reusable pieces of behavior that can be injected into disparate Components. You can pass the mixins using the mixins
property of a Component.
Now, lets get real and build a more comprehensive Component that uses these features.
In this example, we will build an editor that accepts a simple DSL (Domain Specific Language) for creating shapes. As you type in, you will see the corresponding output on the side, giving you live feedback.
The DSL allows you to create three kinds of shapes: Ellipse, Rectangle and Text. Each shape is specified on a separate line along with a bunch of styling properties. The syntax is straightforward and borrows a bit from CSS. To parse a line, we use a Regex that looks like:
var shapeRegex = /(rect|ellipse|text)(\s[a-z]+:\s[a-z0-9]+;)*/i;
As an example, the following set of lines describe two rectangles and a text label…
// React label text value:React; color: #00D8FF; font-size: 48px; text-shadow: 1px 1px 3px #555; padding: 10px; left: 100px; top: 100px; // left logo rect background:url(react.png) no-repeat; border: none; width: 38; height: 38; left: 60px; top: 120px; // right logo rect background:url(react.png) no-repeat; border: none; width: 38; height: 38; left: 250px; top: 120px;
…generating the output shown below:
Alright, lets go ahead and build this editor. We will start out with the HTML file (index.html
), where we put in the top-level markup and include the libraries and application scripts. I am only showing the relevant parts here:
<body> <select class="shapes-picker"> <option value="--">-- Select a sample --</option> <option value="react">React</option> <option value="robot">Robot</option> </select> <div class="container"></div> <!-- Libraries --> <script src="../../lib/jquery-2.0.3.min.js"></script> <script src="../../lib/react.js"></script> <!-- Application Scripts --> <script src="../../build/shape-editor/ShapePropertyMixin.js"></script> <script src="../../build/shape-editor/shapes/Ellipse.js"></script> <script src="../../build/shape-editor/shapes/Rectangle.js"></script> <script src="../../build/shape-editor/shapes/Text.js"></script> <script src="../../build/shape-editor/ShapeParser.js"></script> <script src="../../build/shape-editor/ShapeCanvas.js"></script> <script src="../../build/shape-editor/ShapeEditor.js"></script> <script src="../../build/shape-editor/shapes.js"></script> <script src="../../build/shape-editor/app.js"></script> </body>
In the above snippet, the container
div holds our React generated DOM. Our application scripts are included from the /build
directory. We are using JSX within our components and the command line watcher (jsx
), puts the converted JS files into /build
. Note that this watcher command is part of the react-tools
NPM module.
jsx --watch src/ build/
The editor is broken down into a set of components, which are listed below:
mixins
property.The relationship of these entities is shown in the annotated component-tree:
Lets look at the implementation of some of these components, starting with the ShapeEditor.
/** @jsx React.DOM */ var ShapeEditor = React.createClass({ componentWillMount: function () { this._parser = new ShapeParser(); }, getInitialState: function () { return { text: '' }; }, render: function () { var shapes = this._parser.parse(this.state.text); var tree = ( <div> <textarea class="editor" onChange={this.handleTextChange} /> <ShapeCanvas shapes={shapes} /> </div>); return tree; }, handleTextChange: function (event) { this.setState({ text: event.target.value }) } });
As the name suggests, the ShapeEditor provides the editing experience by generating the <textarea/>
and the live feedback on the <ShapeCanvas/<
. It listens to the onChange
event (events in React are always named with camel case) on the <textarea/>
and on every change, sets the text
property of the component’s state
. As mentioned earlier, whenever you set the state using setState()
, render is called automatically. In this case, the render()
of the ShapeEditor gets called where we parse the text from the state and rebuild the shapes. Note that we are starting with an initial state of empty text, which is set in the getInitialState()
hook.
For parsing the text into a set of shapes, We use an instance of the ShapeParser
. I’ve left out the details of the parser to keep the discussion focused on React. The parser instance is created in the componentWillMount()
hook. This is called just before the component mounts and is a good place to do any initializations before the first render happens.
It is generally recommended that you funnel all your complex processing through the render()
method. Event handlers just set the state while render()
is the hub for all your core logic.
The ShapeEditor
uses this idea to do the parsing inside of its render()
and forwards the detected shapes by setting the shapes
property of the ShapeCanvas
. This is how data flows down into the component tree, from the owner (ShapeEditor
) to the owned (ShapeCanvas
).
One last thing to note in here is that we have the first line comment to indicate JSX → JS translation.
Next, we will move on to the ShapeCanvas and the Ellipse, Rectangle and Text components.
p>The ShapeCanvas
is rather straightforward with its core responsibility of generating the respective <Ellipse/>
, <Rectangle/>
and <Text/>
components from the passed in shape definitions (this.props.shapes
). For each shape, we pass in the parsed properties with the attribute expression: properties={shape.properties}
.
/** @jsx React.DOM */ var ShapeCanvas = React.createClass({ getDefaultProps: function(){ return { shapes: [] }; }, render: function () { var self = this; var shapeTree = <div class="shape-canvas"> { this.props.shapes.map(function(s) { return self._createShape(s); }) } </div>; var noTree = <div class="shape-canvas no-shapes">No Shapes Found</div>; return this.props.shapes.length > 0 ? shapeTree : noTree; }, _createShape: function(shape) { return this._shapeMap[shape.type](shape); }, _shapeMap: { ellipse: function (shape) { return <Ellipse properties={shape.properties} />; }, rect: function (shape) { return <Rectangle properties={shape.properties} />; }, text: function (shape) { return <Text properties={shape.properties} />; } } });
One thing different here is that our component tree is not static, like we have in ShapeEditor. Instead it’s dynamically generated by looping over the passed in shapes. We also show the "No Shapes Found"
message if there is nothing to show.
All of the shapes have a similar structure and differ only in the styling. They also make use of the ShapePropertyMixin
to handle the style generation.
Here’s Ellipse:
/** @jsx React.DOM */ var Ellipse = React.createClass({ mixins: [ShapePropertyMixin], render:function(){ var style = this.extractStyle(true); style['border-radius'] = '50% 50%'; return <div style={style} class="shape" />; } });
The implementation for extractStyle()
is provided by the ShapePropertyMixin
.
The Rectangle component follows suit, of course without the border-radius style. The Text component has an extra property called value
which sets the inner text for the <div/>
.
Here’s Text, to make this clear:
/** @jsx React.DOM */ var Text = React.createClass({ mixins: [ShapePropertyMixin], render:function(){ var style = this.extractStyle(false); return <div style={style} class="shape">{this.props.properties.value}</div>; } });
app.js
is where we bring it all together. Here we render the root component, the ShapeEditor
and also provide support to switch between a few sample shapes. When you pick a different sample from the drop down, we load some predefined text into the ShapeEditor
and cause the ShapeCanvas
to update. This happens in the readShapes()
method.
/** @jsx React.DOM */ var shapeEditor = <ShapeEditor />; React.renderComponent( shapeEditor, document.getElementsByClassName('container')[0] ); function readShapes() { var file = $('.shapes-picker').val(), text = SHAPES[file] || ''; $('.editor').val(text); shapeEditor.setState({ text: text }); // force a render } $('.shapes-picker').change(readShapes); readShapes(); // load time
To exercise the creative side, here is a robot built using the Shape Editor:
Phew! This has been a rather long article and having reached to this point, you should have a sense of achievement!
We have explored a lot of concepts here: the integral role of Components in the framework, use of JSX to easily describe a component tree (aka intermediate-DOM), various hooks to plug into the component lifecyle, use of state
and props
to drive the render process, use of Mixins to factor out reusable behavior and finally pulling all of this together with the Shape Editor example.
Hope this article gives you enough boost to build a few React apps for yourself. To continue your exploration, here are few handy links:
The Best Small Business Web Designs by DesignRush
/Create Modern Vue Apps Using Create-Vue and Vite
/Pros and Cons of Using WordPress
/How to Fix the “There Has Been a Critical Error in Your Website” Error in WordPress
How To Fix The “There Has Been A Critical Error in Your Website” Error in WordPress
/How Long Does It Take to Learn JavaScript?
/The Best Way to Deep Copy an Object in JavaScript
/Adding and Removing Elements From Arrays in JavaScript
/Create a JavaScript AJAX Post Request: With and Without jQuery
/5 Real-Life Uses for the JavaScript reduce() Method
/How to Enable or Disable a Button With JavaScript: jQuery vs. Vanilla
/How to Enable or Disable a Button With JavaScript: jQuery vs Vanilla
/Confirm Yes or No With JavaScript
/How to Change the URL in JavaScript: Redirecting
/15+ Best WordPress Twitter Widgets
/27 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/21 Best Tab and Accordion Widget Plugins for WordPress (Free & Premium)
/30 HTML Best Practices for Beginners
/31 Best WordPress Calendar Plugins and Widgets (With 5 Free Plugins)
/25 Ridiculously Impressive HTML5 Canvas Experiments
/How to Implement Email Verification for New Members
/How to Create a Simple Web-Based Chat Application
/30 Popular WordPress User Interface Elements
/Top 18 Best Practices for Writing Super Readable Code
/Best Affiliate WooCommerce Plugins Compared
/18 Best WordPress Star Rating Plugins
/10+ Best WordPress Twitter Widgets
/20+ Best WordPress Booking and Reservation Plugins
/Working With Tables in React: Part Two
/Best CSS Animations and Effects on CodeCanyon
/30 CSS Best Practices for Beginners
/How to Create a Custom WordPress Plugin From Scratch
/10 Best Responsive HTML5 Sliders for Images and Text… and 3 Free Options
/16 Best Tab and Accordion Widget Plugins for WordPress
/18 Best WordPress Membership Plugins and 5 Free Plugins
/25 Best WooCommerce Plugins for Products, Pricing, Payments and More
10 Best WordPress Twitter Widgets
1 /12 Best Contact Form PHP Scripts for 2020
/20 Popular WordPress User Interface Elements
/10 Best WordPress Star Rating Plugins
/12 Best CSS Animations on CodeCanyon
/12 Best WordPress Booking and Reservation Plugins
/12 Elegant CSS Pricing Tables for Your Latest Web Project
/24 Best WordPress Form Plugins for 2020
/14 Best PHP Event Calendar and Booking Scripts
/Create a Blog for Each Category or Department in Your WooCommerce Store
/8 Best WordPress Booking and Reservation Plugins
/Best Exit Popups for WordPress Compared
/Best Exit Popups for WordPress Compared
/11 Best Tab & Accordion WordPress Widgets & Plugins
/12 Best Tab & Accordion WordPress Widgets & Plugins
1New Course: Practical React Fundamentals
/Preview Our New Course on Angular Material
/Build Your Own CAPTCHA and Contact Form in PHP
/Object-Oriented PHP With Classes and Objects
/Best Practices for ARIA Implementation
/Accessible Apps: Barriers to Access and Getting Started With Accessibility
/Dramatically Speed Up Your React Front-End App Using Lazy Loading
/15 Best Modern JavaScript Admin Templates for React, Angular, and Vue.js
/15 Best Modern JavaScript Admin Templates for React, Angular and Vue.js
/19 Best JavaScript Admin Templates for React, Angular, and Vue.js
/New Course: Build an App With JavaScript and the MEAN Stack
/Hands-on With ARIA: Accessibility Recipes for Web Apps
/10 Best WordPress Facebook Widgets
13 /Hands-on With ARIA: Accessibility for eCommerce
/New eBooks Available for Subscribers
/Hands-on With ARIA: Homepage Elements and Standard Navigation
/Site Accessibility: Getting Started With ARIA
/How Secure Are Your JavaScript Open-Source Dependencies?
/New Course: Secure Your WordPress Site With SSL
/Testing Components in React Using Jest and Enzyme
/Testing Components in React Using Jest: The Basics
/15 Best PHP Event Calendar and Booking Scripts
/Create Interactive Gradient Animations Using Granim.js
/How to Build Complex, Large-Scale Vue.js Apps With Vuex
1 /Examples of Dependency Injection in PHP With Symfony Components
/Set Up Routing in PHP Applications Using the Symfony Routing Component
1 /A Beginner’s Guide to Regular Expressions in JavaScript
/Introduction to Popmotion: Custom Animation Scrubber
/Introduction to Popmotion: Pointers and Physics
/New Course: Connect to a Database With Laravel’s Eloquent ORM
/How to Create a Custom Settings Panel in WooCommerce
/Building the DOM faster: speculative parsing, async, defer and preload
1 /20 Useful PHP Scripts Available on CodeCanyon
3 /How to Find and Fix Poor Page Load Times With Raygun
/Introduction to the Stimulus Framework
/Single-Page React Applications With the React-Router and React-Transition-Group Modules
12 Best Contact Form PHP Scripts
1 /Getting Started With the Mojs Animation Library: The ShapeSwirl and Stagger Modules
/Getting Started With the Mojs Animation Library: The Shape Module
/Getting Started With the Mojs Animation Library: The HTML Module
/Project Management Considerations for Your WordPress Project
/8 Things That Make Jest the Best React Testing Framework
/Creating an Image Editor Using CamanJS: Layers, Blend Modes, and Events
/New Short Course: Code a Front-End App With GraphQL and React
/Creating an Image Editor Using CamanJS: Applying Basic Filters
/Creating an Image Editor Using CamanJS: Creating Custom Filters and Blend Modes
/Modern Web Scraping With BeautifulSoup and Selenium
/Challenge: Create a To-Do List in React
1Deploy PHP Web Applications Using Laravel Forge
/Getting Started With the Mojs Animation Library: The Burst Module
/10 Things Men Can Do to Support Women in Tech
/A Gentle Introduction to Higher-Order Components in React: Best Practices
/Challenge: Build a React Component
/A Gentle Introduction to HOC in React: Learn by Example
/A Gentle Introduction to Higher-Order Components in React
/Creating Pretty Popup Messages Using SweetAlert2
/Creating Stylish and Responsive Progress Bars Using ProgressBar.js
/18 Best Contact Form PHP Scripts for 2022
/How to Make a Real-Time Sports Application Using Node.js
/Creating a Blogging App Using Angular & MongoDB: Delete Post
/Set Up an OAuth2 Server Using Passport in Laravel
/Creating a Blogging App Using Angular & MongoDB: Edit Post
/Creating a Blogging App Using Angular & MongoDB: Add Post
/Introduction to Mocking in Python
/Creating a Blogging App Using Angular & MongoDB: Show Post
/Creating a Blogging App Using Angular & MongoDB: Home
/Creating a Blogging App Using Angular & MongoDB: Login
/Creating Your First Angular App: Implement Routing
/Persisted WordPress Admin Notices: Part 4
/Creating Your First Angular App: Components, Part 2
/Persisted WordPress Admin Notices: Part 3
/Creating Your First Angular App: Components, Part 1
/How Laravel Broadcasting Works
/Persisted WordPress Admin Notices: Part 2
/Create Your First Angular App: Storing and Accessing Data
/Persisted WordPress Admin Notices: Part 1
/Error and Performance Monitoring for Web & Mobile Apps Using Raygun
/Using Luxon for Date and Time in JavaScript
7 /How to Create an Audio Oscillator With the Web Audio API
/How to Cache Using Redis in Django Applications
/20 Essential WordPress Utilities to Manage Your Site
/Introduction to API Calls With React and Axios
/Beginner’s Guide to Angular 4: HTTP
/Rapid Web Deployment for Laravel With GitHub, Linode, and RunCloud.io
/Beginners Guide to Angular 4: Routing
/Beginner’s Guide to Angular 4: Services
/Beginner’s Guide to Angular 4: Components
/Creating a Drop-Down Menu for Mobile Pages
/Introduction to Forms in Angular 4: Writing Custom Form Validators
/10 Best WordPress Booking & Reservation Plugins
/Getting Started With Redux: Connecting Redux With React
/Getting Started With Redux: Learn by Example
/Getting Started With Redux: Why Redux?
/How to Auto Update WordPress Salts
/How to Download Files in Python
/Eloquent Mutators and Accessors in Laravel
1 /10 Best HTML5 Sliders for Images and Text
/Site Authentication in Node.js: User Signup
/Creating a Task Manager App Using Ionic: Part 2
/Creating a Task Manager App Using Ionic: Part 1
/Introduction to Forms in Angular 4: Reactive Forms
/Introduction to Forms in Angular 4: Template-Driven Forms
/24 Essential WordPress Utilities to Manage Your Site
/25 Essential WordPress Utilities to Manage Your Site
/Get Rid of Bugs Quickly Using BugReplay
1 /Manipulating HTML5 Canvas Using Konva: Part 1, Getting Started
/10 Must-See Easy Digital Downloads Extensions for Your WordPress Site
/22 Best WordPress Booking and Reservation Plugins
/Understanding ExpressJS Routing
/15 Best WordPress Star Rating Plugins
/Creating Your First Angular App: Basics
/Inheritance and Extending Objects With JavaScript
/Introduction to the CSS Grid Layout With Examples
1Performant Animations Using KUTE.js: Part 5, Easing Functions and Attributes
Performant Animations Using KUTE.js: Part 4, Animating Text
/Performant Animations Using KUTE.js: Part 3, Animating SVG
/New Course: Code a Quiz App With Vue.js
/Performant Animations Using KUTE.js: Part 2, Animating CSS Properties
Performant Animations Using KUTE.js: Part 1, Getting Started
/10 Best Responsive HTML5 Sliders for Images and Text (Plus 3 Free Options)
/Single-Page Applications With ngRoute and ngAnimate in AngularJS
/Deferring Tasks in Laravel Using Queues
/Site Authentication in Node.js: User Signup and Login
/Working With Tables in React, Part Two
/Working With Tables in React, Part One
/How to Set Up a Scalable, E-Commerce-Ready WordPress Site Using ClusterCS
/New Course on WordPress Conditional Tags
/TypeScript for Beginners, Part 5: Generics
/Building With Vue.js 2 and Firebase
6 /Best Unique Bootstrap JavaScript Plugins
/Essential JavaScript Libraries and Frameworks You Should Know About
/Vue.js Crash Course: Create a Simple Blog Using Vue.js
/Build a React App With a Laravel RESTful Back End: Part 1, Laravel 5.5 API
/API Authentication With Node.js
/Beginner’s Guide to Angular: HTTP
/Beginner’s Guide to Angular: Routing
/Beginners Guide to Angular: Routing
/Beginner’s Guide to Angular: Services
/Beginner’s Guide to Angular: Components
/How to Create a Custom Authentication Guard in Laravel
/Learn Computer Science With JavaScript: Part 3, Loops
/Build Web Applications Using Node.js
/Learn Computer Science With JavaScript: Part 4, Functions
/Learn Computer Science With JavaScript: Part 2, Conditionals
/Create Interactive Charts Using Plotly.js, Part 5: Pie and Gauge Charts
/Create Interactive Charts Using Plotly.js, Part 4: Bubble and Dot Charts
Create Interactive Charts Using Plotly.js, Part 3: Bar Charts
/Awesome JavaScript Libraries and Frameworks You Should Know About
/Create Interactive Charts Using Plotly.js, Part 2: Line Charts
/Bulk Import a CSV File Into MongoDB Using Mongoose With Node.js
/Build a To-Do API With Node, Express, and MongoDB
/Getting Started With End-to-End Testing in Angular Using Protractor
/TypeScript for Beginners, Part 4: Classes
/Object-Oriented Programming With JavaScript
/10 Best Affiliate WooCommerce Plugins Compared
/Stateful vs. Stateless Functional Components in React
/Make Your JavaScript Code Robust With Flow
/Build a To-Do API With Node and Restify
/Testing Components in Angular Using Jasmine: Part 2, Services
/Testing Components in Angular Using Jasmine: Part 1
/Creating a Blogging App Using React, Part 6: Tags
/React Crash Course for Beginners, Part 3
/React Crash Course for Beginners, Part 2
/React Crash Course for Beginners, Part 1
/Set Up a React Environment, Part 4
1 /Set Up a React Environment, Part 3
/New Course: Get Started With Phoenix
/Set Up a React Environment, Part 2
/Set Up a React Environment, Part 1
/Command Line Basics and Useful Tricks With the Terminal
/How to Create a Real-Time Feed Using Phoenix and React
/Build a React App With a Laravel Back End: Part 2, React
/Build a React App With a Laravel RESTful Back End: Part 1, Laravel 9 API
/Creating a Blogging App Using React, Part 5: Profile Page
/Pagination in CodeIgniter: The Complete Guide
/JavaScript-Based Animations Using Anime.js, Part 4: Callbacks, Easings, and SVG
/JavaScript-Based Animations Using Anime.js, Part 3: Values, Timeline, and Playback
/Learn to Code With JavaScript: Part 1, The Basics
/10 Elegant CSS Pricing Tables for Your Latest Web Project
/Getting Started With the Flux Architecture in React
/Getting Started With Matter.js: The Composites and Composite Modules
Getting Started With Matter.js: The Engine and World Modules
/10 More Popular HTML5 Projects for You to Use and Study
/Understand the Basics of Laravel Middleware
/Iterating Fast With Django & Heroku
/Creating a Blogging App Using React, Part 4: Update & Delete Posts
/Creating a jQuery Plugin for Long Shadow Design
/How to Register & Use Laravel Service Providers
2 /Unit Testing in React: Shallow vs. Static Testing
/Creating a Blogging App Using React, Part 3: Add & Display Post
/Creating a Blogging App Using React, Part 2: User Sign-Up
20 /Creating a Blogging App Using React, Part 1: User Sign-In
/Creating a Grocery List Manager Using Angular, Part 2: Managing Items
/9 Elegant CSS Pricing Tables for Your Latest Web Project
/Dynamic Page Templates in WordPress, Part 3
/Angular vs. React: 7 Key Features Compared
/Creating a Grocery List Manager Using Angular, Part 1: Add & Display Items
New eBooks Available for Subscribers in June 2017
/Create Interactive Charts Using Plotly.js, Part 1: Getting Started
/The 5 Best IDEs for WordPress Development (And Why)
/33 Popular WordPress User Interface Elements
/New Course: How to Hack Your Own App
/How to Install Yii on Windows or a Mac
/What Is a JavaScript Operator?
/How to Register and Use Laravel Service Providers
/
waly Good blog post. I absolutely love this…