【发布时间】:2016-09-16 10:52:18
【问题描述】:
我正在尝试使react-router v4 ("react-router": "^4.0.0-2") 在我的项目中工作,并尝试基于quick start example 实现它。但是,我无法使其适用于多条路线。我不断得到:
invariant.js:38 Uncaught Invariant Violation: MatchProvider.render(): A valid React element (or null) must be returned. You may have returned undefined, an array or some other invalid object.
我的代码如下
class Router extends Component {
render() {
let returnVal = (<BrowserRouter>
<Match pattern="/" component={FrontPage} />
<Match pattern="/home" component={Home} />
</BrowserRouter>);
return returnVal;
}
}
export default Router;
webpack 和 babel 生成的代码如下所示
var Router = function (_Component) {
_inherits(Router, _Component);
function Router() {
_classCallCheck(this, Router);
return _possibleConstructorReturn(this, (Router.__proto__ || Object.getPrototypeOf(Router)).apply(this, arguments));
}
_createClass(Router, [{
key: 'render',
value: function render() {
var returnVal = _react2.default.createElement(
_reactRouter.BrowserRouter,
null,
_react2.default.createElement(_reactRouter.Match, { pattern: '/', component: _FrontPage2.default }),
_react2.default.createElement(_reactRouter.Match, { pattern: '/home', component: _Home2.default })
);
return returnVal;
}
}]);
return Router;
}(_react.Component);
我已经设置了一个调试器语句来抛出错误,我看到以下内容:
您可以看到返回的 react 元素是一个数组,因为错误消息暗示它可能是。并且 props 将违规组件标识为我的 BrowserHistory 组件中的路由。
如果我删除其中一条路由,使得 BrowserHistory 组件内只有一个元素,它会正确呈现。如果我有一个 Match 和一个 Miss 组件,它也会给出错误。
我不确定从哪里开始查找,错误发生在哪个库中。据我所知,输出代码是有效的,我不知道为什么它不能正确呈现。
如果有人知道如何解决它,将不胜感激。
【问题讨论】:
-
我遇到了同样的问题。将它与
create-react-app一起使用,所以还没有完成任何 Babel 设置。
标签: reactjs react-router