Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Warning: Failed propType: Invalid prop `component` supplied to `Route`

I'm trying new react-router 1.0.0 and I'm getting strange warnings I can't explain:

Warning: Failed propType: Invalid prop `component` supplied to `Route`.

Warning: Invalid undefined `component` supplied to `Route`.

The app is simple:

import React from 'react'; import ReactDOM from 'react-dom'; import { Router, Route } from 'react-router';  import App from './components/app';  var Speaker = require('./components/speaker');  ReactDOM.render((     <Router>       <Route path="/" component={App}>         // This is the source of the warning:         <Route path="speaker" component={ Speaker }/>       </Route>     </Router> ), document.getElementById('react-container')); 

speaker.jsx:

import React from 'react';  var Speaker = React.createClass({   render() {     return (         <h1>Speaker</h1>     )   } });  module.exoprts = Speaker; 

app.jsx only has the following render() function:

render() {     return (         <div>             <Header title={this.state.title} status={this.state.status} />              {this.props.children}         </div>); } 

When I type in the route to #/speaker or #speaker - nothing is displayed except for title. Please help.

like image 930
Alex Kovshovik Avatar asked Nov 27 '15 04:11

Alex Kovshovik


2 Answers

Standardize your module's imports and exports then you won't risk hitting problems with misspelled property names.

module.exports = Component should become export default Component.

CommonJS uses module.exports as a convention, however, this means that you are just working with a regular Javascript object and you are able to set the value of any key you want (whether that's exports, exoprts or exprots). There are no runtime or compile-time checks to tell you that you've messed up.

If you use ES6 (ES2015) syntax instead, then you are working with syntax and keywords. If you accidentally type exoprt default Component then it will give you a compile error to let you know.

In your case, you can simplify the Speaker component.

import React from 'react';  export default React.createClass({   render() {     return (       <h1>Speaker</h1>     )   } }); 
like image 191
Dan Prince Avatar answered Sep 27 '22 19:09

Dan Prince


it is solved in react-router-dom 4.4.0 see: Route's proptypes fail

now it is beta, or just wait for final release.

npm install [email protected] --save 
like image 23
Ozan Honamlioglu Avatar answered Sep 27 '22 20:09

Ozan Honamlioglu