Skip to content

Instantly share code, notes, and snippets.

View teimurjan's full-sized avatar
:electron:

Teimur Gasanov teimurjan

:electron:
View GitHub Profile
@teimurjan
teimurjan / webpack-bundle-analyzer.js
Created May 21, 2018 06:25
blog-react-applications-optimization
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
module.exports = {
plugins: [new BundleAnalyzerPlugin()]
};
@teimurjan
teimurjan / vendor-client.js
Created May 21, 2018 06:27
blog-react-applications-optimization
const webpack = require("webpack");
module.exports = {
entry: {
client: "./src/index.js",
vendor: ["react", "react-dom", "react-router", "react-router-dom"]
},
plugins: [
new webpack.optimize.CommonsChunkPlugin({
name: "vendor",
@teimurjan
teimurjan / chunks-webpack.js
Created May 21, 2018 06:28
blog-react-applications-optimization
const webpack = require("webpack");
const path = require("path");
const buildPath = path.resolve("build");
module.exports = {
output: {
path: buildPath,
filename: "[name].[chunkhash:8].js",
chunkFilename: "[name].[chunkhash:8].chunk.js"
@teimurjan
teimurjan / home.js
Created May 21, 2018 06:29
blog-react-applications-optimization
// home.js
import React from "react";
export default () => (
<div className="wrapper">
<h2>Home</h2>
</div>
);
@teimurjan
teimurjan / home-container.js
Created May 21, 2018 06:30
blog-react-applications-optimization
// home-container.js
import Loadable from "react-loadable";
import Spinner from "../Common/Spinner";
export default Loadable({
loader: () => import("./Home" /*webpackChunkName: 'home' */),
loading: Spinner
});
@teimurjan
teimurjan / component-scu.js
Last active May 21, 2018 06:37
blog-react-applications-optimization
export default class extends React.Component {
shouldComponentUpdate(nextProps, nextState) {
return true;
}
}
@teimurjan
teimurjan / pure-component-scu.js
Created May 21, 2018 06:37
blog-react-applications-optimization
export default class extends React.PureComponent {
shouldComponentUpdate(nextProps, nextState) {
return !(
shallowEqual(nextProps, this.props) && shallowEqual(nextState, this.state)
);
}
}
@teimurjan
teimurjan / shallow-equal.js
Created May 21, 2018 06:41
blog-react-applications-optimization
const arr1 = [1, 2, 3];
const arr2 = [1, 2, 3];
arr1 === arr2; // false
const obj1 = { foo: "bar" };
const obj2 = { foo: "bar" };
obj1 === obj2; // false
@teimurjan
teimurjan / arrow-in-render-list.js
Created May 21, 2018 06:44
blog-react-applications-optimization
render() {
return (
<ul>
{this.props.todos.map(todo => (
<Todo todo={todo} onClick={() => this.props.onTodoClick(todo.id)} />
))}
</ul>
);
}
@teimurjan
teimurjan / arrow-in-render-todo.js
Last active May 21, 2018 06:56
blog-react-applications-optimization
class Todo extends React.Component {
render() {
return (
<li className="todo" onClick={this.props.onClick}>
{this.props.todo}
</li>
);
}
}