From 0f4b847e17f1c53aa9c7654bc61615a67df8509c Mon Sep 17 00:00:00 2001 From: Sam Bhagwat Date: Sat, 13 Jan 2018 16:17:54 -0800 Subject: [PATCH 1/3] make ComponentRenderer shouldUpdateComponent return true when props change --- .../gatsby/cache-dir/component-renderer.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/gatsby/cache-dir/component-renderer.js b/packages/gatsby/cache-dir/component-renderer.js index 8b07be5e23eb6..61e8cd7cc7785 100644 --- a/packages/gatsby/cache-dir/component-renderer.js +++ b/packages/gatsby/cache-dir/component-renderer.js @@ -3,6 +3,7 @@ import PropTypes from "prop-types" import loader, { publicLoader } from "./loader" import emitter from "./emitter" import { apiRunner } from "./api-runner-browser" +import _ from "lodash" const DefaultLayout = ({ children }) =>
{children()}
@@ -117,6 +118,24 @@ class ComponentRenderer extends React.Component { return true } + if (Object.keys(this.props).length !== Object.keys(nextProps).length) { + return true; + } + + // shallow object comparison, assume child object equality + const differentProps = Object.keys(this.props).filter(key => ( + typeof this.props[key] !== "object" && + this.props[key] !== nextProps[key] + )) + + if (differentProps.length) { + return true + } + + if (!_.isEqual(this.props.location, nextProps.location)) { + return true; + } + return false } From 0b4e7a891206c4610563d1d355328b0badc3c8dd Mon Sep 17 00:00:00 2001 From: Sam Bhagwat Date: Thu, 25 Jan 2018 22:22:20 -0800 Subject: [PATCH 2/3] use shallow compare --- .../gatsby/cache-dir/component-renderer.js | 27 ++++--------------- packages/gatsby/package.json | 1 + 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/packages/gatsby/cache-dir/component-renderer.js b/packages/gatsby/cache-dir/component-renderer.js index 61e8cd7cc7785..26a91a88cdb51 100644 --- a/packages/gatsby/cache-dir/component-renderer.js +++ b/packages/gatsby/cache-dir/component-renderer.js @@ -3,7 +3,7 @@ import PropTypes from "prop-types" import loader, { publicLoader } from "./loader" import emitter from "./emitter" import { apiRunner } from "./api-runner-browser" -import _ from "lodash" +import shallowCompare from "shallow-compare" const DefaultLayout = ({ children }) =>
{children()}
@@ -91,22 +91,22 @@ class ComponentRenderer extends React.Component { if (!nextState.pageResources) { return true } - // Check if the component or json have changed. if (!this.state.pageResources && nextState.pageResources) { return true } - if ( this.state.pageResources.component !== nextState.pageResources.component ) { return true } + if (this.state.pageResources.json !== nextState.pageResources.json) { return true } + // Check if location has changed on a page using internal routing // via matchPath configuration. if ( @@ -118,28 +118,11 @@ class ComponentRenderer extends React.Component { return true } - if (Object.keys(this.props).length !== Object.keys(nextProps).length) { - return true; - } - - // shallow object comparison, assume child object equality - const differentProps = Object.keys(this.props).filter(key => ( - typeof this.props[key] !== "object" && - this.props[key] !== nextProps[key] - )) - - if (differentProps.length) { - return true - } - - if (!_.isEqual(this.props.location, nextProps.location)) { - return true; - } - - return false + return shallowCompare(this, nextProps, nextState) } render() { + console.log("222") const pluginResponses = apiRunner(`replaceComponentRenderer`, { props: { ...this.props, pageResources: this.state.pageResources }, loader: publicLoader, diff --git a/packages/gatsby/package.json b/packages/gatsby/package.json index abea5a4100d54..8d8bb641b757c 100644 --- a/packages/gatsby/package.json +++ b/packages/gatsby/package.json @@ -96,6 +96,7 @@ "relay-compiler": "^1.4.1", "remote-redux-devtools": "^0.5.7", "serve": "^6.4.0", + "shallow-compare": "^1.2.2", "sift": "^3.2.6", "signal-exit": "^3.0.2", "slash": "^1.0.0", From 49b7e249cc97ca6cec5b1e9ace096b1f19d4fc06 Mon Sep 17 00:00:00 2001 From: Sam Bhagwat Date: Sun, 28 Jan 2018 22:01:03 -0800 Subject: [PATCH 3/3] remove console log --- packages/gatsby/cache-dir/component-renderer.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/gatsby/cache-dir/component-renderer.js b/packages/gatsby/cache-dir/component-renderer.js index 26a91a88cdb51..b10749eac5b2a 100644 --- a/packages/gatsby/cache-dir/component-renderer.js +++ b/packages/gatsby/cache-dir/component-renderer.js @@ -122,7 +122,6 @@ class ComponentRenderer extends React.Component { } render() { - console.log("222") const pluginResponses = apiRunner(`replaceComponentRenderer`, { props: { ...this.props, pageResources: this.state.pageResources }, loader: publicLoader,