当前位置: 首页 > 知识库问答 >
问题:

在React Router v4中以编程方式导航

葛驰
2023-03-14

我迫不及待地开始使用最新的alpha版本的react路由器v4。全新的


共有3个答案

郦良才
2023-03-14

我没有足够的声誉来评论,但在回答@singularity的问题时,您必须包括希望在组件类“contextTypesstatic属性”上可用的上下文属性。

上下文中的React docs

如果未定义contextTypes,则上下文将是空对象。

在这种情况下:

class NavigateNext extends React.Component {

  // ...

  static contextTypes = {
    router: PropTypes.object
  }

  // ...

}

propTypes不同,contextTypes实际上导致React的行为不同,并且不仅仅用于类型检查。

楚承天
2023-03-14

在过去,您可能使用Browser历史来推送新路径。这将不工作与react-routerv4。相反,您必须使用React的上下文routertranstionTo方法。

下面是一个简单的例子:

import React from 'react';

class NavigateNext extends React.Component {
  constructor() {
    super();
    this.navigateProgramatically = this.navigateProgramatically.bind(this);
  }

  navigateProgramatically(e) {
    e.preventDefault();

    this.context.router.transitionTo(e.target.href)
  }

  render() {
    return (
      <Link to={"/next-page"}
            onClick={this.navigateProgramatically}
      >Continue</Link>
    );
  }
}

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

transition只是可用的router方法之一router对象还包含blockTransitions(getPromptMessage)createHref(to)replaceWith(loc),这些都值得签出。

这里是官方的react-router教程,其中提到了上述方法。如果你想了解更多关于使用上下文的信息,请查看文档。

游鸣
2023-03-14

路由器将在props哈希中向您的组件添加一个历史对象。因此,在您的组件中,只需执行:

this.props.history.push('/mypath')

下面是一个完整的例子:

App.js中:

import React from 'react'
import {BrowserRouter as Router, Route} from 'react-router-dom'

import Login from './Login'

export default class App extends React.Component {
  render() {
    return (
      <Router>
        <div>
          <Route exact path='/login' component={Login} />
        </div>
      </Router>
    )
  }
}

Login.js中:

import React, {PropTypes} from 'react'

export default class Login extends React.Component {
  constructor(props) {
    super(props)
    this.handleLogin = this.handleLogin.bind(this)
  }

  handleLogin(event) {
    event.preventDefault()
    // do some login logic here, and if successful:
    this.props.history.push(`/mypath`)
  }

  render() {
    return (
      <div>
        <form onSubmit={this.handleLogin}>
          <input type='submit' value='Login' />
        </form>
      </div>
    )
  }
}
 类似资料:
  • 问题内容: 我一直在寻找这种解决方案已有一段时间,但是没有任何解决方案。例如一个解决方案是 此代码将添加带有“停止”图像的按钮。就像这样,还有其他解决方案,例如“搜索,刷新”等。但是 ,如果我想以编程方式在想要的图像上添加按钮,该怎么办? 问题答案: 自定义按钮图片,未设置按钮框: 您可以使用指定的图像和其他属性来初始化新项目。 检查此Apple文档。参考 UIBarButtonItem具有使用按

  • 问题内容: 完成一些验证后,如何移动到新页面?我有这样的事情: 我想将用户发送到另一条路线。我看过Redirect,但似乎它将从历史记录中删除我不想要的当前页面。 问题答案: 您正在使用react-router v4,因此您需要在组件中使用withRouter来访问历史对象的属性,然后使用它来动态更改路由。 withRouter : 您可以通过withRouter高阶组件访问历史对象的属性和最接近

  • 问题内容: 我正在尝试使用导航栏(“后退”按钮,标题等)和选项卡栏(底部的工具栏)制作一个应用程序。我使用的是子视图,因此不必担心状态栏,导航栏,标签栏的高度等问题。但是我认为这给我带来了麻烦,因为我似乎无法弄清楚如何设置导航栏和标签栏。 这就是我所拥有的。我究竟做错了什么? AppDelegate.h AppDelegate.m ViewController.h ViewController.m

  • 问题内容: 我有一个带有标题的导航栏。当我双击文本以将其重命名时,它实际上说这是一个导航项,所以可能就是这样。 我正在尝试使用代码来更改文本,例如: 那显然不是我的代码,只是显示了它是如何工作的。 因此,每当我按下按钮时,我都希望标题更改。 问题答案: 您可以通过更改显示的视图控制器的标题来更改标题: 通常,这是在视图控制器上加载视图时完成的: 但是,这仅在将视图控制器嵌入UINavigation

  • 问题内容: 通过使用我可以使用元素创建由React Router本机处理的链接。 我在内部看到它的呼唤。 我想导航。不是来自链接,而是来自下拉菜单(例如)。如何在代码中执行此操作?什么啊 我看到了mixin,但是如果没有,我可以这样做吗? 问题答案: 带有钩子的React Router v5.1.0 如果您使用React> 16.8.0和功能组件,则React Router> 5.1.0中会有一个

  • 问题内容: 描述性示例: 登录屏幕,用户点击“登录”按钮,执行请求,UI显示等待指示器,然后在成功响应后,我想自动将用户导航到下一个屏幕。 如何在SwiftUI中实现这种自动转换? 问题答案: 成功登录后,可以使用登录视图替换下一个视图。例如: 您应该在数据模型中处理登录过程,并使用绑定(例如)传递到视图。 注意: 在Xcode中 11.0版测试4 ,以符合协议 “BindableObject”