2017-04-12 14 views
0

私はこの問題を今週持ち、ソリューションを見つけることができません。 コンポーネントをRootコンポーネントでレンダリングしようとしています。Rootコンポーネントでレンダリングコンポーネントを試してください

index.jsファイル:

import React, {Component} from 'react'; 
import ReactDOM from 'react-dom'; 
import { 
    BrowserRouter as Router, 
    Route, 
    Link, 
} from 'react-router' 

import IndexContent from './components/indexContent'; 
import IndexHome from './components/indexHome'; 
import Root from './components/root'; 


class App extends Component{ 
    render(){ 
    return(
     <Router> 
     <Root> 
      <Route exact path="/" component={IndexContent}/> 
      <Route path="/indexhome" component={IndexHome} /> 
     </Root> 
     </Router> 
    ) 
    } 
} 

export default App; 

ReactDOM.render(<App/>, document.getElementById('wrapper')); 

root.jsファイル:

import React,{Component} from 'react'; 

import NavBar from './NavBar'; 
import Footer from './footer'; 

class Root extends Component{ 
    render(){ 
     return(
       <div> 
        <NavBar/> 
        {this.props.children} 
        <Footer/> 
       </div> 
     ) 
    } 
}; 


export default Root; 

indexContent.jsファイル:

import React,{Component} from 'react'; 


class IndexContent extends Component{ 
    render(){ 
     return(
       <h1>IndexContent</h1> 
      ) 
    } 
}; 



export default IndexContent; 

indexHome.jsファイル:

import React, {Component} from 'react'; 


class IndexHome extends Component{ 

    render(){ 
     return(
      <h1>IndexHome</h1> 
     ) 
    } 
} 

export default IndexHome; 

と私は取得していますエラーは次のとおりです。

1)警告:React.createElement:タイプが無効です - 文字列を期待(内蔵用(コンポーネントの場合)またはクラス/関数(コンポジットコンポーネントの場合)ですが、未定義です。コンポーネントが定義されているファイルからコンポーネントをエクスポートするのを忘れた可能性があります。Appというレンダリング方法を確認してください。

2)未知のエラー:要素の種類が無効です:組み込みコンポーネントの文字列または複合/コンポーネントのクラス/関数が必要ですが、未定義です。コンポーネントが定義されているファイルからコンポーネントをエクスポートするのを忘れた可能性があります。Appというレンダリング方法を確認してください。不変(bundle.js:946)で ReactCompositeComponentWrapper.instantiateReactComponentで[_instantiateReactComponentとして(bundle.js:12837) ReactCompositeComponentWrapper.performInitialMountで(bundle.js:22340) ReactCompositeComponentWrapper.mountComponent(bundle.js:22231)でReactCompositeComponentWrapper.performInitialMountで (bundle.js:22344)ReactCompositeComponentWrapper.mountComponentで (bundle.js:22231)Object.mountComponentで (bundle.js:4663) で:Object.mountComponent(4663 bundle.js)で mountComponentIntoNode(bundle.js:12047) at ReactReconcileTransaction.perform(bundle.js:7037)

+0

私たちとindexContent.jsとindexHome.jsコードを共有できますか?何か間違っているはずです。それとも、あなたの輸入品になる可能性があります。とにかく、コードは私たちにもっとまともな理解を与えるでしょう –

+0

@GiorgiKhorguani ありがとうございました。私は編集してindexContent.jsとindexHome.jsを見ることができます また、私はreact-router v4を使用しています(違いがあれば) –

+0

'import'ステートメントの1つが無効だと思います。 1.すべてのパスが正しいことを確認します。 2.それらに '.js'拡張を追加します。 'ルートを './components/root.js'からインポートします。 – Sulthan

答えて

0

App要素のクラスを実装する必要はありません。ただ、矢印機能にそれをラップし、私は私のアプリがそうのように私のルートから離れていReactDom.render

const App =() => (
    <Router> 
     <Root> 
      <Route exact path="/" component={IndexContent}/> 
      <Route path="/indexhome" component={IndexHome} /> 
     </Root> 
    </Router> 
); 

ReactDOM.render(<App/>, document.getElementById('wrapper')); 
+0

これはまだ動作していません。 しかしこれはtanxです。 –

+0

実際には、私はあなたがバベルを使用していると推測する段階を経た後にjsコードを表示する理由を理解することがより簡単になります。その場合、実際にあなたが 'React.createElement'で送信しているものが表示されます。その場合、実行時に 'App'値をデバッグするのは簡単でしょう。 –

+0

'React.createElement'はあなたが' jsx' dom構文で存在するときにjsを呼び出します。あなたはどのようなバージョンのreact-routerを使用していますか? –

0

に渡しますが、簡単に組み合わせることができます

Routes.js

import React from 'react'; 
import {Router, Route, IndexRoute} from 'react-router'; 

import App from './Components/App'; 
import Forgot from './Components/Auth/ForgotPassword'; 
import Register from './Components/Register/RegisterForm'; 
import NotFound from './Components/NotFound'; 
import LoginForm from './Components/Auth/LoginForm'; 
import Logout from './Components/Auth/Logout'; 
import Admin from './Components/Admin'; 
import Dashboard from './Components/Dashboard/Dashboard'; 


const Routes = (props) => (
    <Router {...props}> 
     <Route path="/" component={App}> 
      <IndexRoute component={LoginForm}/> 
      <Route path="register" component={Register}/> 
      <Route path="forgotpassword" component={Forgot}/> 
      <Route path="logout" component={Logout}/> 
     </Route> 
     <Route path="/admin" component={Admin}> 
      <IndexRoute component={Dashboard}/> 
     </Route> 
     <Route path="*" component={NotFound}/> 
    </Router> 
); 

export default Routes; 

そして、私のメインのアプリ作成者: index.jsここ

import React from 'react'; 
import ReactDOM from 'react-dom'; 
import { browserHistory } from 'react-router'; 
import Routes from './routes'; 
import './index.css'; 


ReactDOM.render(
    <Routes history={browserHistory} />, 
    document.getElementById('root') 
); 
+0

どのようなバージョンのreact-routerを使用していますか? –

+0

私は反応ルータv3.0.2を使用しています – mikeg542

+0

私はそう思った、私はv4.0.0を使用しています それらの間にいくつかの違いがあります –

0

import React, { Component } from 'react'; 

var reactRouter = require('react-router') 
var Router = reactRouter.Router 
var Route = reactRouter.Route 
var Link = reactRouter.Link 
import { createHashHistory } from 'history' 
const history = createHashHistory(); 


import logo from './logo.svg'; 
import './App.css'; 

import IndexContent from './indexContent'; 
import IndexHome from './indexHome'; 
import Root from './root'; 

class App extends Component { 
    render() { 
    return (
      <Router history={history}> 
       <Root> 
       <Route exact path='/' component={IndexContent}/> 
       <Route path='/indexhome' component={IndexHome} /> 
       </Root> 
      </Router> 
    ); 
    } 
} 

export default App; 

パッケージの場合にのみ、json

{ 
    "name": "stackoverflow", 
    "version": "0.1.0", 
    "private": true, 
    "dependencies": { 
    "react": "^15.5.4", 
    "react-dom": "^15.5.4", 
    "react-router": "^4.1.0" 
    }, 
    "devDependencies": { 
    "react-scripts": "0.9.5" 
    }, 
    "scripts": { 
    "start": "react-scripts start", 
    "build": "react-scripts build", 
    "test": "react-scripts test --env=jsdom", 
    "eject": "react-scripts eject" 
    } 
} 
+0

ありがとうございました!この混乱の中でいくらか意味をなさない。 –

関連する問題