8
8
var React = require ( 'react' ) ;
9
9
var invariant = require ( 'react/lib/invariant' ) ;
10
10
var createRouter = require ( './router' ) ;
11
- var NotFoundError = require ( './not-found-error' ) ;
12
11
var utils = require ( './utils' ) ;
13
12
var request = require ( './request' ) ;
13
+ var NotFoundError = require ( './not-found-error' ) ;
14
14
15
15
var ControllerInterface = {
16
16
17
17
getInitialState : function ( ) {
18
18
var req = this . props . request ;
19
+ var page = this . createPageForRequest ( req ) ;
19
20
return {
20
21
request : req ,
21
- page : this . createPageForRequest ( req )
22
+ page : page
22
23
} ;
23
24
} ,
24
25
@@ -29,7 +30,13 @@ var ControllerInterface = {
29
30
* ReactCompositeComponent policy which disallows render() method overrides.
30
31
*/
31
32
defaultRender : function ( ) {
32
- return React . DOM . div ( null , this . state . page ) ;
33
+ if ( this . state . page !== null ) {
34
+ return React . DOM . div ( null , this . state . page ) ;
35
+ } else if ( typeof this . renderNotFound === 'function' ) {
36
+ return this . renderNotFound ( ) ;
37
+ } else {
38
+ throw new NotFoundError ( this . state . request . path ) ;
39
+ }
33
40
} ,
34
41
35
42
componentDidMount : function ( ) {
@@ -50,7 +57,7 @@ var ControllerInterface = {
50
57
var match = this . router . match ( req . path ) ;
51
58
52
59
if ( ! match ) {
53
- throw new NotFoundError ( req . path ) ;
60
+ return null ;
54
61
}
55
62
56
63
return match . handler ( utils . extend ( { request : req } , match . params ) ) ;
@@ -70,9 +77,11 @@ var ControllerInterface = {
70
77
if ( request . isEqual ( this . state . request , req ) )
71
78
return ;
72
79
80
+ var page = this . createPageForRequest ( req ) ;
81
+
73
82
this . setState ( {
74
83
request : req ,
75
- page : this . createPageForRequest ( req )
84
+ page : page
76
85
} , cb ) ;
77
86
} ,
78
87
0 commit comments