Skip to content

Commit 91e7000

Browse files
committed
don't modify state from server in browser
1 parent b7ebda4 commit 91e7000

File tree

3 files changed

+28
-14
lines changed

3 files changed

+28
-14
lines changed

src/browser-router.tsx

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,17 @@ import { Context, stringifyQuery } from 'router-async';
55
export default class BrowserRouter extends Router {
66
private history: any;
77
private unlistenHistroy: any;
8+
private stateFromServer: any;
89
constructor(props) {
910
super(props);
1011
this.history = props.history;
12+
this.stateFromServer = null;
1113
if (window && '__REACT_ROUTER_ASYNC__' in window) {
12-
const stateFromServer = window['__REACT_ROUTER_ASYNC__'].state;
13-
if (stateFromServer.error !== null) {
14+
this.stateFromServer = window['__REACT_ROUTER_ASYNC__'].state;
15+
if (this.stateFromServer.error !== null) {
1416
this.state = {
15-
...stateFromServer,
16-
Component: BrowserRouter.getErrorComponent(stateFromServer.error, this.errors)
17+
...this.stateFromServer,
18+
Component: BrowserRouter.getErrorComponent(this.stateFromServer.error, this.errors)
1719
}
1820
}
1921
}
@@ -93,4 +95,16 @@ export default class BrowserRouter extends Router {
9395
componentWillUnmount() {
9496
this.unlistenHistroy();
9597
}
98+
render() {
99+
return (
100+
<div>
101+
{this.props.children ? this.props.children : <this.state.Component {...this.state.componentProps} />}
102+
{this.stateFromServer !== null ?
103+
<script dangerouslySetInnerHTML={{ __html: `window.__REACT_ROUTER_ASYNC__=${JSON.stringify({
104+
state: this.stateFromServer
105+
})};`}} /> : null
106+
}
107+
</div>
108+
)
109+
}
96110
}

src/router.tsx

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -162,14 +162,4 @@ export default class Router extends React.Component<Props, State> {
162162
getState() {
163163
return this.state;
164164
}
165-
render() {
166-
return (
167-
<div>
168-
{this.props.children ? this.props.children : <this.state.Component {...this.state.componentProps} />}
169-
<script dangerouslySetInnerHTML={{ __html: `window.__REACT_ROUTER_ASYNC__=${JSON.stringify({
170-
state: this.state
171-
})};`}} />
172-
</div>
173-
)
174-
}
175165
}

src/server-router.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,14 @@ export default class ServerRouter extends Router {
1717
router: this
1818
};
1919
}
20+
render() {
21+
return (
22+
<div>
23+
{this.props.children ? this.props.children : <this.state.Component {...this.state.componentProps} />}
24+
<script dangerouslySetInnerHTML={{ __html: `window.__REACT_ROUTER_ASYNC__=${JSON.stringify({
25+
state: this.state
26+
})};`}} />
27+
</div>
28+
)
29+
}
2030
}

0 commit comments

Comments
 (0)