Как выполнить функцию возврата в React

Я использую реагирующий маршрутизатор v.4, и я хотел бы выполнить некоторую функцию возврата.

Мой текущий код выглядит следующим образом:

<HashRouter>
       <Switch>
            <Route exact path='/' component = {Main}/>
            <Route path='/secondview' component = {SecondView}/>
            <Route path='/traineeships' render = {()=>(<Traineeship rootState = {this.state} setRootState = {this.setState.bind(this)} />)}/>
            <Route path='/information-filter' render = {()=>(<InformationFilter rootState = {this.state} setRootState = {this.setState.bind(this)} />)}/>
            <Route path='/find-work' render = {()=>(<FindWork rootState = {this.state} setRootState = {this.setState.bind(this)} />)}/>
            <Route path='/information-job' render = {()=>(<InformationJob rootState = {this.state} setRootState = {this.setState.bind(this)} />)}/>
            <Redirect from='*' to='/' />
       </Switch>

Я пробовал несколько вариантов, например this.props.history.go(-1), на других компонентах, но получал неопределенные ошибки.

Кто-нибудь знает, как выполнить функцию возврата в моем случае?

@VicJordan Я получаю Uncaught TypeError: не могу прочитать свойство goBack для undefined, когда я делаю то же самое, что и ответ на этот дублированный запрос!

Mizlul 29.05.2018 10:22

вы используете withRouter для своих страниц? github.com/ReactTraining/react-router/blob/master/packages/…

Evgeny Timoshenko 29.05.2018 10:23

Пожалуйста, предоставьте минимальный воспроизводимый пример, чтобы получить лучший ответ.

bennygenel 29.05.2018 10:24
Поведение ключевого слова "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) для оценки ваших знаний,...
1
3
9 065
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В зависимости от версии react-router (в данном случае 3.0) вы можете включить BrowserHistory first и сделать:

const BrowserHistory = require('react-router/lib/BrowserHistory').default;

и вы можете использовать его в JSX:

<button onClick = {BrowserHistory.goBack}>Back</button>

И этот код в вашем файле приложения:

<Router history = {BrowserHistory}>
    <Route path = "/" component = {App} />
</Router>

Я получаю сообщение об ошибке: не могу найти модуль «response-router / lib / BrowserHistory»

Mizlul 29.05.2018 10:36

@Mizlul Я не заметил, что вы используете v4 :)

GibboK 29.05.2018 10:48
Ответ принят как подходящий

Вы можете использовать withRouter, если вам нужно получить доступ к объекту истории:

import React from 'react'
import { withRouter } from 'react-router'

class SecondView extends React.Component {
  render() {
    return (
      <button onClick = {() => this.props.history.go(-1)} />
    )
  }
}

const SecondViewnWithRouter = withRouter(SecondView)

withRouter will pass updated match, location, and history props to the wrapped component whenever it renders.

https://github.com/ReactTraining/react-router/blob/master/packages/react-router/docs/api/withRouter.md

спасибо, это работает!

Mizlul 29.05.2018 10:39

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