2015-11-27 15 views
27

Tôi đang cố gắng phản ứng-router mới 1.0.0 và tôi nhận được cảnh báo lạ Tôi không thể giải thích:Cảnh báo: Không propType: prop không hợp lệ 'component` cung cấp cho `Route`

Cảnh báo: Không thành công propType: Phần tử không hợp lệ `component` được cung cấp cho ` Tuyến đường`.

Cảnh báo: Thành phần `không xác định 'không hợp lệ được cung cấp cho` Tuyến đường`.

Ứng dụng rất đơn giản:

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 chỉ có() chức năng sau đây render:

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

      {this.props.children} 
     </div>); 
} 

Khi tôi nhập vào tuyến đường đến #/loa hoặC#speaker - không có gì được hiển thị ngoại trừ tiêu đề. Hãy giúp tôi.

+4

Có một lỗi đánh máy trong mã hoặc câu hỏi, 'module.exoprts' của bạn? Ngoài ra tại sao bạn trộn ES6 với ES5? Sử dụng nhập khẩu ở khắp mọi nơi thay vì thực hiện 'require' –

+0

Wow! Chỉ cần wow! Đây chính là nó! Tôi đã dành 50 phút googling, thử các kiểu nhập khác nhau - ES5 và ES6, nhưng đó là một lỗi đánh máy đơn giản. Cảm ơn bạn rất nhiều @limelights! Bạn là ông chủ! –

+0

Việc lưu giữ một kiểu sẽ giảm các lỗi này trong tương lai, vui mừng khi nó hoạt động! –

Trả lời

44

Chuẩn hóa nhập khẩu và xuất khẩu của mô-đun của bạn thì bạn sẽ không gặp rủi ro khi gặp sự cố với tên thuộc tính sai chính tả.

module.exports = Component nên trở thành export default Component.

CommonJS sử dụng module.exports như quy ước, tuy nhiên điều này có nghĩa là bạn chỉ làm việc với một đối tượng Javascript thường xuyên và bạn có thể thiết lập giá trị của bất kỳ phím nào bạn muốn (cho dù đó là exports, exoprts hoặc exprots). Không có thời gian chạy hoặc biên dịch kiểm tra thời gian để cho bạn biết rằng bạn đã sai lầm.

Nếu bạn sử dụng cú pháp ES6 (ES2015) thay vào đó, thì bạn đang làm việc với cú pháp và từ khóa. Nếu bạn vô tình nhập exoprt default Component thì nó sẽ cung cấp cho bạn một lỗi biên dịch để cho bạn biết.

Trong trường hợp của bạn, bạn có thể đơn giản hóa thành phần Loa.

import React from 'react'; 

export default React.createClass({ 
    render() { 
    return (
     <h1>Speaker</h1> 
    ) 
    } 
}); 
1

này chắc chắn là một vấn đề cú pháp, khi nó đã xảy ra với tôi, tôi phát hiện ra tôi gõ

module.export = Component; thay vì module.exports = Component;

Các vấn đề liên quan