From eefeaeeb7e16a739d8c5dee65151b62250eb5597 Mon Sep 17 00:00:00 2001 From: Gabriel Bull Date: Sat, 8 Oct 2016 12:25:14 -0400 Subject: [PATCH] Fixed bug that would instanciate new components when not necessary --- CHANGELOG.md | 4 ++++ package.json | 2 +- src/match.js | 19 ++++++++++++++----- src/wrapperComponent.js | 12 +++++++----- 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f01cc6d..e84a0d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # CHANGELOG +## 0.2.2 (October 8th, 2016) + +- Fixed bug that would instantiate new components when not necessary + ## 0.2.1 (October 6th, 2016) - Fixed issue with webpack bundle that would import the wrong module diff --git a/package.json b/package.json index 8e623a8..ddf5dbc 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "react-router-server", "author": "Gabriel Bull", - "version": "0.2.1", + "version": "0.2.2", "description": "Server Side Rendering library for React Router v4", "main": "./build/index.js", "keywords": [ diff --git a/src/match.js b/src/match.js index b3a9659..33b37ee 100644 --- a/src/match.js +++ b/src/match.js @@ -17,17 +17,26 @@ class Match extends Component { serverRouter: PropTypes.object } - render() { - const { match, render, ...props } = this.props; - const nextRender = matchProps => wrapperComponent( + componentWillMount() { + const { render } = this.props; + this.wrapperComponent = wrapperComponent( render, { ...this.props }, this.context.serverRouter && this.context.serverRouter.asyncRenderer ? this.context.serverRouter.asyncRenderer : null - )(matchProps); + ); + const WrapperComponent = this.wrapperComponent; + this.nextRender = matchProps => { + return ; + } + } + + render() { + const { match, ...props } = this.props; + delete props.render; delete props.willEnter; const Match = match; - return ; + return ; } } diff --git a/src/wrapperComponent.js b/src/wrapperComponent.js index 76bb0d8..4329772 100644 --- a/src/wrapperComponent.js +++ b/src/wrapperComponent.js @@ -1,8 +1,12 @@ import React, { Component, PropTypes, isValidElement } from 'react' import { setAsyncRenderer } from './importModule'; -export default (render, options, asyncRenderer) => (matchProps) => { - class WrapperComponent extends Component { +export default (render, options, asyncRenderer) => { + return class extends Component { + static propTypes = { + matchProps: PropTypes.object + }; + isComponentMounted = false; constructor() { @@ -28,7 +32,7 @@ export default (render, options, asyncRenderer) => (matchProps) => { if (!WrappedComponent) { setAsyncRenderer(asyncRenderer); - WrappedComponent = render(matchProps, { ...this.state.nextProps }); + WrappedComponent = render(this.props.matchProps, { ...this.state.nextProps }); } if (WrappedComponent.then) { @@ -64,6 +68,4 @@ export default (render, options, asyncRenderer) => (matchProps) => { return null; } } - - return ; };