如何在 React 中执行返回功能 [重复]

Posted

技术标签:

【中文标题】如何在 React 中执行返回功能 [重复]【英文标题】:How to perform go back function in React [duplicate] 【发布时间】:2018-11-07 19:46:41 【问题描述】:

我正在使用 react-router 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: Cannot read property 'goBack' of undefined 当我和那个重复问题的答案一样时! 您的页面是否使用withRouter? github.com/ReactTraining/react-router/blob/master/packages/… 请提供minimal reproducible example 以获得更好的答案。 【参考方案1】:

如果你需要访问历史对象,你可以使用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 会将更新后的匹配、位置和历史道具传递给 每当渲染时包装组件。

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

【讨论】:

【参考方案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>

【讨论】:

我收到错误:找不到模块“react-router/lib/BrowserHistory” @Mizlul 我没有注意到您使用的是 v4 :)

以上是关于如何在 React 中执行返回功能 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何等到在nodejs中执行流异步[重复]

使用 findIndex() 从数组中删除特定元素 - React [重复]

在反应中如何以及在何处获取数据[重复]

React前后端如何同构,防止重复渲染

react redux中如何防止重复的列表对象

React 功能组件 - 当组件返回元素数组时,如何将 refs 传递回父级?