React не будет отображать мои компоненты с помощью маршрутизатора

#html #css #reactjs #routes

Вопрос:

Я очень новичок в реагировании и пытаюсь работать на своем первом веб-сайте. Я пытался найти свою проблему в Интернете, я сталкивался с аналогичными вопросами, но не мог понять, в чем именно заключается моя проблема.

Мой макет компонентов выполнен в стиле прокрутки вниз (портфолио), когда я пытаюсь, например, проложить маршрут к своему компоненту контактов, он не будет отображаться, если я не обновлю свою страницу. кроме того, вместо прокрутки вниз до компонента он появится вверху .(Надеюсь, я ясно выразился)

Моя функция Приложения

 import { useState } from 'react';
import { BrowserRouter, Route, Switch } from 'react-router-dom';
import './App.css';
import Contact from './Components/Contact/Contact';
import Form from './Components/FormArea/Form/form';
import Introdoction from './Components/Introdoction/Introdoction';
import NavBar from './Components/NavBar/NavBar';
import NavigationBar from './Components/NavigationBarHeader/NavigationBar/NavigationBar';
import Portfolio from './Components/Portfolio/Portfolio';
import Routing from './Components/Routing/Routing';
import Skills from './Components/Skills/Skills';



function App() {
 
  return (
    <BrowserRouter>
    <Switch>
    <div className="App">
      
      <NavigationBar/>
     
      <section className="section">
      
        <Route path="/contact" component={Contact} exact/>
        <Introdoction/>
        <Portfolio/>
        <Skills/>
        {/* <Contact/> */}
        <Form/>
      </section>
    </div>
    </Switch>
  </BrowserRouter>
  );
  
}

export default App;
 

Я пытаюсь настроить компонент «Контакт» для этого примера.

Компонент «Мое меню/Навигационная панель»

 import { Component, MouseEventHandler } from "react";
import {MenuItems} from "../MenuItems/MenuItems";
import "./NavigationBar.css";
import icon from '../../../Assets/icon.png'
import  {Button}  from "../Button/Button";
import { NavLink, Redirect, Route, Switch, useHistory } from "react-router-dom";
import Contact from "../../Contact/Contact";


class NavigationBar extends Component {
    state = {clicked : false}

    handleClick = () => {
        this.setState ( { clicked: !this.state.clicked } );
      };

    public render(): JSX.Element {
        return (
          
            <nav className="NavbarItems ">
                <img className="navbar-logo"src={icon } />
                <div className="menu-icon" onClick={this.handleClick}>
                    <i className={this.state.clicked ? 'fas fa-times' : 'fas times'}></i>

                </div>

                <ul className={this.state.clicked ? 'nav-menu active' : 'nav-menu'}>

                    {MenuItems.map((item,index) => {
                        return (

                            <li key={index}>

                        <NavLink to={item.url} className={item.cName} >{item.title} </NavLink>
                        
                            </li>
                        )
                    })}

                    
                </ul>
                <Button>Sign up</Button>
               
            </nav>
        );
    }
}



export default NavigationBar;
 

Компонент ItemMenu

 import { NavLink } from "react-router-dom";
import "./MenuItems.css";

export const MenuItems = [
    {
        title: 'Home',
        url: '/Home',
        cName: 'nav-links'
    },
    {
        title: 'Introduction',
        url: '/introduction',
        cName: 'nav-links'
    },
    {
        title: 'Skills',
        url: '/skills',
        cName: 'nav-links'
    },
    {
        title: 'Projects',
        url: '/projects',
        cName: 'nav-links'
    },
    {
        title: 'Contact',
        url: '/contact',
        cName: 'nav-links'
    },
];
 

При необходимости я мог бы добавить дополнительную информацию. Я надеюсь, что мой вопрос ясен в том, в чем моя проблема.

Спасибо.

Ответ №1:

Если я правильно понял ваш вопрос, вам нужна одна-единственная страница, где все находится друг под другом, и когда вы нажимаете ссылку, она прокручивает вас вниз до этого места. В этом случае я бы использовал:

 <a href="#contact"></a>
<Contact id="contact" />
 

react-маршрутизатор создает новые подстраницы, которые вам не нужны (если я вас правильно понял)