Ссылка ReactJS в компоненте кнопки

У меня есть:

import React, {Component} from 'react';
import {Link} from 'react-router-dom';

export default class NavItem extends Component {
    render() {
        return <Link to = {'/test'}>
            <div className = "navbar__item">
                <img src = {'png/navigation/' + this.props.icon}/>
            </div>
        </Link>
    }
}

Где ссылка будет передана через prop. Но я не уверен, как это сделать, так как консоль говорит мне, что ее нужно обернуть в Router и Route.

Как я могу заставить это работать?


Консоль дает мне это:

Warning: Failed context type: The context `router` is marked as required in `Link`, but its value is `undefined`.

Мне удалось сделать это так:

render() {
        return <BrowserRouter>
            <Link to = {this.props.url}>
                <div className = "navbar__item">
                    <img src = {'png/navigation/' + this.props.icon}/>
                </div>
            </Link>
        </BrowserRouter>
    }

Вы ищете маршрутизацию, которая использует кнопку для перенаправления, в отличие от Link? history.push в обработчике щелчка может выполнить то же самое.

Andrew 05.02.2019 21:08

@ Эндрю, я не уверен, это просто кнопка, которая отправляет пользователя на другую страницу в моем приложении. Является ли ссылка правильным способом сделать это? или мне просто использовать тег <a>?

imperium2335 05.02.2019 21:13

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

Hemadri Dasari 05.02.2019 21:28

@HemadriDasari Я обновил свой вопрос тем, что в консоли.

imperium2335 05.02.2019 21:34

Ссылка должна быть под маршрутами, что означает, что NavItem должен вызываться под маршрутами.

Hemadri Dasari 05.02.2019 21:40

@HemadriDasari, но все мои маршруты хранятся в App.js

imperium2335 05.02.2019 21:46

Не могли бы вы привести пример?

imperium2335 05.02.2019 21:48

Пожалуйста, проверьте это stackoverflow.com/questions/44499919/…

Hemadri Dasari 05.02.2019 21:57

@HemadriDasari Мне удалось заставить его работать, смотрите мой отредактированный вопрос.

imperium2335 05.02.2019 21:59
Поведение ключевого слова "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) для оценки ваших знаний,...
0
9
62
1

Ответы 1

Я считаю, что вы просто хотите использовать history.push в качестве обработчика onclick. Он делает то же самое, что и Link.

handleRouteChange = () => {
  history.push(this.props.routeName)
}

render() {
  return (
    <button onClick = {this.handleRouteChange}>
      click
    </button>
  )
}

В какой-то момент инициализации вашего приложения вы должны передать объект history. импортируйте любой компонент, который нуждается в history. Он имеет метод push.

export const history = createHashHistory()
<Router history = {history}>
  <Routes />
</Router>

Откуда берется исторический объект?

imperium2335 05.02.2019 22:39

Обновлено. Это тот же объект, который вы передаете в HOC маршрута реагирования.

Andrew 05.02.2019 23:00

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