有没有人能告诉我如何回到上一页,而不是具体的路线?

当使用此代码时:

var BackButton = React.createClass({

 mixins: [Router.Navigation],
  render: function() {
    return (
        <button
            className="button icon-left"
            onClick={this.navigateBack}>
            Back
        </button>
    );
  },

  navigateBack: function(){
    this.goBack();
  }
});

得到这个错误,goBack()被忽略,因为没有路由器历史

以下是我的路线:

// Routing Components
Route = Router.Route;
RouteHandler = Router.RouteHandler;
DefaultRoute = Router.DefaultRoute;

var routes = (
 <Route name="app" path="/" handler={OurSchoolsApp}>
     <DefaultRoute name="home" handler={HomePage} />
     <Route name="add-school" handler={AddSchoolPage}  />
     <Route name="calendar" handler={CalendarPage}  />
     <Route name="calendar-detail" path="calendar-detail/:id" handler={CalendarDetailPage} />
     <Route name="info-detail" path="info-detail/:id" handler={InfoDetailPage} />
     <Route name="info" handler={InfoPage} />
     <Route name="news" handler={NewsListPage} />
     <Route name="news-detail" path="news-detail/:id" handler={NewsDetailPage} />
     <Route name="contacts" handler={ContactPage} />
     <Route name="contact-detail" handler={ContactDetailPage} />
     <Route name="settings" handler={SettingsPage} />
 </Route>
 );

 Router.run(routes, function(Handler){
   var mountNode = document.getElementById('app');
   React.render(<Handler /> , mountNode);
 });

当前回答

如果你在应用程序中使用react-native抽屉导航作为主路由器,并希望控制返回按钮的行为和历史返回,你可以使用控件返回按钮。

< NavigationContainer > <抽屉。导航器 backBehavior = "历史" > //你的屏幕在这里 < /抽屉里。导航器> < / NavigationContainer >

其他回答

对于react-router v2。这已经改变了。以下是我为ES6所做的:

import React from 'react';
import FontAwesome from 'react-fontawesome';
import { Router, RouterContext, Link, browserHistory } from 'react-router';

export default class Header extends React.Component {

  render() {
    return (
      <div id="header">
        <div className="header-left">
          {
            this.props.hasBackButton &&
            <FontAwesome name="angle-left" className="back-button" onClick={this.context.router.goBack} />
          }
        </div>
        <div>{this.props.title}</div>
      </div>
    )
  }
}

Header.contextTypes = {
  router: React.PropTypes.object
};

Header.defaultProps = {
  hasBackButton: true
};

Header.propTypes = {
  title: React.PropTypes.string
};

在react-router v6中,当你想返回到前一页时,你可以使用useNavigate:

步骤1:

import { useNavigate } from "react-router-dom";

步骤2:

const navigate = useNavigate();

第三步:如果你想回到前一页,使用navigate(-1):

<button onClick={() => navigate(-1)}> Back </button>

进口withRouter import {withRouter} from 'react-router-dom'; 导出你的组件为: 导出withRouter (nameofcomponent) 例如,在按钮单击时,调用goBack: 回<按钮onClick = {this.props.history.goBack} > < / >按钮

在react-router-dom v4.3上测试

步骤1

import { useHistory } from "react-router-dom";`

步骤2

let history = useHistory();

步骤3

const goToPreviousPath = (e) => {
   e.preventDefault();
   history.goBack()
}

步骤4

<Button
  onClick={goToPreviousPath}
>
  Back
</Button>

回来的

你也可以使用react-router-redux,它有goBack()和push()。

下面是一个样本包:

在你的应用程序的入口点,你需要ConnectedRouter,有时需要连接的一个棘手的连接是history对象。Redux中间件监听历史更改:

import React from 'react'
import { render } from 'react-dom'
import { ApolloProvider } from 'react-apollo'
import { Provider } from 'react-redux'
import { ConnectedRouter } from 'react-router-redux'
import client from './components/apolloClient'
import store, { history } from './store'
import Routes from './Routes'
import './index.css'

render(
  <ApolloProvider client={client}>
    <Provider store={store}>
      <ConnectedRouter history={history}>
        <Routes />
      </ConnectedRouter>
    </Provider>
  </ApolloProvider>,
  document.getElementById('root'),
)

我会告诉你一个连接历史的方法。注意历史记录是如何导入到商店的,也可以作为一个单例导出,这样它就可以在应用程序的入口点使用:

import { createStore, applyMiddleware, compose } from 'redux'
import { routerMiddleware } from 'react-router-redux'
import thunk from 'redux-thunk'
import createHistory from 'history/createBrowserHistory'
import rootReducer from './reducers'

export const history = createHistory()

const initialState = {}
const enhancers = []
const middleware = [thunk, routerMiddleware(history)]

if (process.env.NODE_ENV === 'development') {
  const { devToolsExtension } = window
  if (typeof devToolsExtension === 'function') {
    enhancers.push(devToolsExtension())
  }
}

const composedEnhancers = compose(applyMiddleware(...middleware), ...enhancers)
const store = createStore(rootReducer, initialState, composedEnhancers)

export default store

上面的示例块展示了如何加载react-router-redux中间件帮助程序来完成设置过程。

我认为接下来的部分完全是额外的,但我将包括它,以防将来有人发现好处:

import { combineReducers } from 'redux'
import { routerReducer as routing } from 'react-router-redux'

export default combineReducers({
  routing, form,
})

我一直在使用routerReducer,因为它允许我强制重载组件,而通常情况下由于shouldComponentUpdate而无法重载组件。一个明显的例子是当你有一个导航栏,当用户按下导航链接按钮时,它应该更新。如果您沿着这条路走下去,您将了解到Redux的连接方法使用shouldComponentUpdate。使用routerReducer,你可以使用mapStateToProps将路由更改映射到导航栏中,这将在历史对象更改时触发它更新。

是这样的:

const mapStateToProps = ({ routing }) => ({ routing })

export default connect(mapStateToProps)(Nav)

请原谅我为人们添加了一些额外的关键字:如果您的组件没有正确更新,请通过删除连接函数来调查shouldComponentUpdate,看看它是否修复了问题。如果是这样,拉入routerReducer,当URL改变时,组件就会正确更新。

最后,在完成所有这些之后,您可以随时调用goBack()或push() !

现在尝试一些随机的组件:

在connect()中导入 你甚至不需要mapStateToProps或者mapDispatchToProps 从react-router-redux导入goBack和push 调用this.props.dispatch(返回()) 调用this.props.dispatch (push(' /三明治')) 体验积极情绪

如果你需要更多的样本,请访问:https://www.npmjs.com/package/react-router-redux