React Routing Redirect onClick

Я пытался выполнить простое перенаправление на другой компонент при нажатии кнопки, но по какой-то причине это не работает. Я хочу перенаправить на '/ dashboard' и отобразить AdminServices из входа в систему следующим образом:

//index.js

ReactDOM.render(<BrowserRouter><App /></BrowserRouter>, 
    document.getElementById("root"));

//App.js

     <Switch>
          <Route path = "/" component = {Login} />
          <Route path = "/dashboard" component = {AdminServices} />
        </Switch>

//Login.js

<Button
onClick = {this.login}
>
</Button>

login = () =>{
    <Redirect to = "/dashboard" />
  }

//AdminServices.js

render(){
        return(
            <div>Test</div>
        );
    }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
0
43 253
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Просто используйте NavLink вместо кнопки

import { NavLink } from 'react-router-dom'

<NavLink to = "/dashboard"> Dashboard </NavLink>

https://reacttraining.com/react-router/web/api/NavLink

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

Yashank 18.07.2018 05:49

привет @YashankVarshney, можешь использовать history.pushstackoverflow.com/a/45263164/4089357reacttraining.com/react-router/core/api/history

Abdullah 18.07.2018 05:53

Конечно, я читал в Интернете, что переадресация или создание ссылок предпочтительнее, чем push? В любом случае я попытался установить NavLink, и теперь он приводит меня к нужному URL-адресу, но по какой-то причине он все еще показывает тот же компонент, а не другой: /

Yashank 18.07.2018 05:58

хммм, не уверен, можете ли вы попробовать использовать exact в маршруте, т.е. <Route path = "/" exact component = {Login} />

Abdullah 18.07.2018 06:03

nvm, я думаю, мне просто пришлось использовать «точный» путь, чтобы избавиться от другого компонента. Теперь работает нормально!

Yashank 18.07.2018 06:03

Вы можете выполнить маршрутизацию по функциям следующим образом

  handleOnSubmit = () => {
  this.props.history.push(`/dashboard`);
  };

Надеюсь на эту помощь

Уже пробовал, но другой мой компонент все равно не отображается. Также Link делает это странным подчеркиванием, с которым мне придется иметь дело позже. Как я могу просто использовать функцию для перенаправления? :)

Yashank 18.07.2018 05:50

Я думаю это должно помочь

Adnan 18.07.2018 07:13

Компонент <Switch> отображает только первый совпадающий маршрут. Вам просто нужно поменять местами компоненты <Route> в корпусе <Switch> и использовать ответ @Adnan shah для выполнения функции перенаправления.

P.S реагировать на пример аутентификации маршрутизатора

Так стоит ли мне вообще избавиться от <Switch>? Вы были правы, говоря о маршрутизации только к первому компоненту .. Теперь, когда я пытаюсь перейти от '/ dashbaord' к '/ addservice', это не работает: / Удалить его полностью?

Yashank 18.07.2018 21:44

Это случилось со мной, когда я пропустил импорт компонента в файл route.js.

Вам необходимо ссылаться / импортировать файлы из компонента в файл маршрута.

Ответ принят как подходящий

Вместо использования props.history лучше использовать хук useHistory, как показано ниже:

import { useHistory } from 'react-router-dom'

const MyComponent = (props) => {
  const history = useHistory();

  handleOnSubmit = () => {
    history.push(`/dashboard`);
  };
};

Используйте тег

<a href = "/" />

Другие вопросы по теме