diff --git a/lib/index.js b/lib/index.js index 5c2c546..e201d80 100644 --- a/lib/index.js +++ b/lib/index.js @@ -16,6 +16,10 @@ var _pathToRegexp = require('path-to-regexp'); var _pathToRegexp2 = _interopRequireDefault(_pathToRegexp); +var _queryString = require('query-string'); + +var _queryString2 = _interopRequireDefault(_queryString); + function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function subscribe(history, dispatch) { @@ -55,11 +59,14 @@ function subscribe(history, dispatch) { if (!lastMatch) { shouldExec = true; } else { - shouldExec = _diff(match.slice(1), lastMatch.slice(1), currentLocation.query, lastLocation.query, queries); + var currentQuery = _queryString2.default.parse(currentLocation.search); + var lastQuery = _queryString2.default.parse(lastLocation.search); + shouldExec = _diff(match.slice(1), lastMatch.slice(1), currentQuery, lastQuery, queries); } } if (shouldExec) { var queryResult = []; + var search = _queryString2.default.parse(currentLocation.search); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; @@ -68,7 +75,7 @@ function subscribe(history, dispatch) { for (var _iterator2 = (0, _getIterator3.default)(queries), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var query = _step2.value; - queryResult.push(currentLocation.query[query]); + queryResult.push(search[query]); } } catch (err) { _didIteratorError2 = true; @@ -95,7 +102,9 @@ function subscribe(history, dispatch) { for (var _iterator3 = (0, _getIterator3.default)(action), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var i = _step3.value; - dispatch(i); + if (i) { + dispatch(i); + } } } catch (err) { _didIteratorError3 = true; @@ -112,7 +121,9 @@ function subscribe(history, dispatch) { } } } else { - dispatch(action); + if (action) { + dispatch(action); + } } } } diff --git a/package.json b/package.json index ccb6ba2..471ced1 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,8 @@ }, "dependencies": { "babel-runtime": "^6.23.0", - "path-to-regexp": "^1.7.0" + "path-to-regexp": "^1.7.0", + "query-string": "^6.0.0" }, "peerDependencies": { "dva": "^1.0.0" diff --git a/src/index.js b/src/index.js index 12aba79..ed96fe5 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,7 @@ */ import pathToRegexp from 'path-to-regexp' +import queryString from 'query-string' /** * @param {Object} history, react-router history @@ -47,21 +48,28 @@ function subscribe (history, dispatch, ...rules) { if (!lastMatch) { shouldExec = true } else { - shouldExec = _diff(match.slice(1), lastMatch.slice(1), currentLocation.query, lastLocation.query, queries) + const currentQuery = queryString.parse(currentLocation.search); + const lastQuery = queryString.parse(lastLocation.search); + shouldExec = _diff(match.slice(1), lastMatch.slice(1), currentQuery, lastQuery, queries) } } if (shouldExec) { const queryResult = [] + const search = queryString.parse(currentLocation.search) for (let query of queries) { - queryResult.push(currentLocation.query[query]) + queryResult.push(search[query]) } const action = actionCreator && actionCreator(...match.slice(1), ...queryResult) if (Array.isArray(action)) { for (let i of action) { - dispatch(i) + if (i) { + dispatch(i) + } } } else { - dispatch(action) + if (action) { + dispatch(action) + } } } }