Skip to content

Commit 8d9c099

Browse files
kfuledead-claudia
authored andcommitted
[refactor] router: simplify router state representation
The `state` is represented as a three-valued integer, but due to the `sentinel === currentResolver` condition, a boolean state appears to be sufficient in practice. This improves code readability and further reduces the bundle size.
1 parent 0e9ffc4 commit 8d9c099

File tree

1 file changed

+6
-15
lines changed

1 file changed

+6
-15
lines changed

api/router.js

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ var parsePathname = require("../pathname/parse")
88
var compileTemplate = require("../pathname/compileTemplate")
99
var censor = require("../util/censor")
1010

11-
var sentinel = {}
12-
1311
function decodeURIComponentSave(component) {
1412
try {
1513
return decodeURIComponent(component)
@@ -27,26 +25,22 @@ module.exports = function($window, mountRedraw) {
2725

2826
var scheduled = false
2927

30-
// state === 0: init
31-
// state === 1: scheduled
32-
// state === 2: done
3328
var ready = false
34-
var state = 0
29+
var hasBeenResolved = false
3530

3631
var compiled, fallbackRoute
3732

38-
var currentResolver = sentinel, component, attrs, currentPath, lastUpdate
33+
var currentResolver, component, attrs, currentPath, lastUpdate
3934

4035
var RouterRoot = {
4136
onbeforeupdate: function() {
42-
state = state ? 2 : 1
43-
return !(!state || sentinel === currentResolver)
37+
return hasBeenResolved
4438
},
4539
onremove: function() {
4640
$window.removeEventListener("popstate", fireAsync, false)
4741
},
4842
view: function() {
49-
if (!state || sentinel === currentResolver) return
43+
if (!hasBeenResolved) return
5044
// Wrap in a fragment to preserve existing key semantics
5145
var vnode = [Vnode(component, attrs.key, attrs)]
5246
if (currentResolver) vnode = currentResolver.render(vnode[0])
@@ -85,9 +79,6 @@ module.exports = function($window, mountRedraw) {
8579

8680
loop(0)
8781
function loop(i) {
88-
// state === 0: init
89-
// state === 1: scheduled
90-
// state === 2: done
9182
for (; i < compiled.length; i++) {
9283
if (compiled[i].check(data)) {
9384
var payload = compiled[i].component
@@ -99,9 +90,9 @@ module.exports = function($window, mountRedraw) {
9990
component = comp != null && (typeof comp.view === "function" || typeof comp === "function")? comp : "div"
10091
attrs = data.params, currentPath = path, lastUpdate = null
10192
currentResolver = payload.render ? payload : null
102-
if (state === 2) mountRedraw.redraw()
93+
if (hasBeenResolved) mountRedraw.redraw()
10394
else {
104-
state = 2
95+
hasBeenResolved = true
10596
mountRedraw.redraw.sync()
10697
}
10798
}

0 commit comments

Comments
 (0)