私は新しい反応ルーター1.0.0を試していますが、説明できない奇妙な警告が出ています:
警告:失敗したpropType:無効なprop `component`が` Route`に提供されました。
警告: `Route`に指定された無効な未定義の` component`。
アプリはシンプルです:
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には次のrender()関数のみがあります:
render() {
return (
<div>
<Header title={this.state.title} status={this.state.status} />
{this.props.children}
</div>);
}
#/ speakerまたは#speakerへのルートを入力すると、タイトル以外は何も表示されません。助けてください。
モジュールのインポートとエクスポートを標準化すると、スペルの間違ったプロパティ名で問題が発生するリスクがなくなります。
module.exports = Component
はexport default Component
になります。
CommonJSはmodule.exports
を規則として使用しますが、これは通常のJavascriptオブジェクトで作業しているだけで、必要なキーの値を設定できることを意味します(exports
、exoprts
またはexprots
)。混乱したことを通知する実行時またはコンパイル時のチェックはありません。
代わりにES6(ES2015)構文を使用する場合、構文とキーワードを使用しています。誤ってexoprt default Component
と入力すると、コンパイルエラーが通知されます。
あなたの場合、Speakerコンポーネントを簡素化できます。
import React from 'react';
export default React.createClass({
render() {
return (
<h1>Speaker</h1>
)
}
});
react-router-dom 4.4.0で解決されました: ルートのproptypesが失敗します
現在はベータ版であるか、最終リリースを待っています。
npm install [email protected] --save
場合によっては、redux-form
でラップされたコンポーネントでルーティングし、このJSX要素のRoute
コンポーネント引数を置き換えます。
<Route path="speaker" component={Speaker}/>
次のようなRoute
レンダリング引数を使用すると、問題が修正されます。
<Route path="speaker" render={props => <Speaker {...props} />} />
これは間違いなく構文の問題です。それが私に起こったとき、私はタイプしたことを発見しました
module.export = Component;
の代わりにmodule.exports = Component;
これはファイルのインポート/エクスポートに関連する構文の問題です。インポートから余分な引用符を削除することで解決しました
<Route path={`${match.path}/iso-line-number`} component={ISOLineNumber} />
エクスポートのデフォルトを指定していない場合、エラーがスローされます。 module.exports = Speaker;を指定したかどうかを確認してください。 //ここでスペルミスをして、exoprtsを書き、すべてのモジュールをチェックインして、正しくエクスポートしたかどうかを確認します。
私の場合、。jsファイルを空のままにしておきます。つまり、ルートで使用した後、。jsファイルに何も書き込まないので、make function componentまたはclass componentそして最後にexport動作します
[email protected]もこのバグを修正し、更新するだけです:
npm i --save react-router
react-router-dom
(v5)には、この問題の修正を含む安定したリリースがあります。
この質問は少し古いですが、まだここに来てreact-router 4.を使用している人にとってはバグであり、ベータ版4.4.0で修正済みです。反応するルーターをバージョン+4.4.0にアップグレードするだけです。現時点ではベータ版であることに注意してください。
yarn add react-router@next
または
npm install -s [email protected]