简体   繁体   English

反应 - 反应路由器 - A<router> 可能只有一个子元素</router>

[英]React - React Router - A <Router> may have only one child element

I'm a newbie at React, please correct me if I'm wrong...I've used the Switch tag to enclose multiple Routes in my MainComponent.js file.我是 React 的新手,如果我错了请纠正我...我使用 Switch 标签将多个路由包含在我的 MainComponent.js 文件中。 However, I still got an error that says "A may have only one child element".但是,我仍然收到一条错误消息,提示“A 可能只有一个子元素”。 I'm trying to navigate from one page to another.我正在尝试从一页导航到另一页。 For example, when I click on Menu in the landing page, I would like to get routed to Menu.例如,当我点击着陆页中的菜单时,我想转到菜单。 Please advise what went wrong.请告知出了什么问题。 Thanks in advance.提前致谢。

在此处输入图像描述

index.js索引.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import 'bootstrap/dist/css/bootstrap.min.css';
import 'font-awesome/css/font-awesome.css';
import 'bootstrap-social/bootstrap-social.css';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

reportWebVitals();

App.js应用程序.js

import React, { Component } from 'react';
import Main from './components/MainComponent';
import './App.css';
import { BrowserRouter } from 'react-router-dom';

class App extends Component {
  // pass dishes to children (MenuComponent.js) as props
  /*
  constructor(props) {
    super(props);

    this.state = {
      dishes: DISHES
    };
  }*/

  render() {
    return (
      <BrowserRouter>           {/*  Make use of React Router */}
          <div className="App">
              <Main />
          </div>
      </BrowserRouter>
    );
  }
}

export default App;

MainComponent.js主组件.js

// Container Component

import React, { Component } from 'react';
import Menu from './MenuComponent';
import DishDetail from './DishdetailComponent';
import Header from './HeaderComponent';
import Footer from './FooterComponent';
import Home from './HomeComponent';
import { DISHES } from '../shared/dishes';          // .. means to go up one level to src
import { Switch, Route, Redirect } from 'react-router-dom';

class Main extends Component {
    // pass dishes to children (MenuComponent.js) as props
    constructor(props) {
        super(props);

        this.state = {
            dishes: DISHES,
            // selectedDish: null
        };
    }
/*
    onDishSelect(dishId) {
        this.setState({selectedDish: dishId});
    }
*/
    render() {
        const HomePage = () => {
            return (
                <Home />
            );
        }
        
        return (
            <div>
                <Header />
                <Switch>
                    <Route path="/home" component={HomePage} />
                    <Route exact path="/menu" component={() => <Menu dishes={this.state.dishes} />} />  {/* path should exactly match /menu and nothing else after /menu */}
                                                                                                        {/* component={() => <Menu dishes={this.state.dishes} />} ----> this will allow to pass props to Menu component */}
                    <Redirect to="/home" />     {/* if the path doesn't match any above, redirect to /home */}
                </Switch>
                <Footer />                                                                                                        
            </div>
        );
    }
}

export default Main;

I'm a newbie at React, please correct me if I'm wrong...I've used the Switch tag to enclose multiple Routes in my MainComponent.js file.我是 React 的新手,如果我错了,请纠正我...我使用 Switch 标签将多个路由包含在我的 MainComponent.js 文件中。 However, I still got an error that says "A may have only one child element".但是,我仍然收到一条错误消息,提示“A 可能只有一个子元素”。 I'm trying to navigate from one page to another.我正在尝试从一页导航到另一页。 For example, when I click on Menu in the landing page, I would like to get routed to Menu.例如,当我在登录页面中单击菜单时,我想被路由到菜单。 Please advise what went wrong.请指教出了什么问题。 Thanks in advance.提前致谢。

在此处输入图像描述

index.js index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import 'bootstrap/dist/css/bootstrap.min.css';
import 'font-awesome/css/font-awesome.css';
import 'bootstrap-social/bootstrap-social.css';

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

reportWebVitals();

App.js应用程序.js

import React, { Component } from 'react';
import Main from './components/MainComponent';
import './App.css';
import { BrowserRouter } from 'react-router-dom';

class App extends Component {
  // pass dishes to children (MenuComponent.js) as props
  /*
  constructor(props) {
    super(props);

    this.state = {
      dishes: DISHES
    };
  }*/

  render() {
    return (
      <BrowserRouter>           {/*  Make use of React Router */}
          <div className="App">
              <Main />
          </div>
      </BrowserRouter>
    );
  }
}

export default App;

MainComponent.js MainComponent.js

// Container Component

import React, { Component } from 'react';
import Menu from './MenuComponent';
import DishDetail from './DishdetailComponent';
import Header from './HeaderComponent';
import Footer from './FooterComponent';
import Home from './HomeComponent';
import { DISHES } from '../shared/dishes';          // .. means to go up one level to src
import { Switch, Route, Redirect } from 'react-router-dom';

class Main extends Component {
    // pass dishes to children (MenuComponent.js) as props
    constructor(props) {
        super(props);

        this.state = {
            dishes: DISHES,
            // selectedDish: null
        };
    }
/*
    onDishSelect(dishId) {
        this.setState({selectedDish: dishId});
    }
*/
    render() {
        const HomePage = () => {
            return (
                <Home />
            );
        }
        
        return (
            <div>
                <Header />
                <Switch>
                    <Route path="/home" component={HomePage} />
                    <Route exact path="/menu" component={() => <Menu dishes={this.state.dishes} />} />  {/* path should exactly match /menu and nothing else after /menu */}
                                                                                                        {/* component={() => <Menu dishes={this.state.dishes} />} ----> this will allow to pass props to Menu component */}
                    <Redirect to="/home" />     {/* if the path doesn't match any above, redirect to /home */}
                </Switch>
                <Footer />                                                                                                        
            </div>
        );
    }
}

export default Main;

Just remove the <div className="App"> from your App.js file.只需从您的 App.js 文件中删除<div className="App">即可。 And use the below code as I have written below.并使用我在下面写的下面的代码。 It will 100% work for you.它将 100% 为您工作。

import { BrowserRouter } from 'react-router-dom';

class App extends Component 
 { 
  render() {
    
    return ( 
    <BrowserRouter>
        <Main/>
   </BrowserRouter>
    );
   
 }
}
export default App;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM