通过使用react-router
我可以使用Link
元素创建由React Router本机处理的链接。
我在内部看到它的呼唤this.context.transitionTo(...)
。
我想导航。不是来自链接,而是来自下拉菜单(例如)。如何在代码中执行此操作?什么this.context
啊
我看到了Navigation
mixin,但是如果没有,我可以这样做mixins
吗?
带有钩子的React Router v5.1.0
useHistory
如果您使用React> 16.8.0和功能组件,则React Router> 5.1.0中会有一个新的钩子。
import { useHistory } from "react-router-dom";
function HomeButton() {
const history = useHistory();
function handleClick() {
history.push("/home");
}
return (
<button type="button" onClick={handleClick}>
Go home
</button>
);
}
反应路由器v4
使用React Router v4,您可以采用三种方法在组件内进行编程路由。
withRouter
高阶组件。<Route>
context
。React
Router主要是history
库的包装器。history
通过浏览window.history
器和哈希历史记录为您处理与浏览器的交互。它还提供了内存历史记录,这对于没有全局历史记录的环境很有用。这在移动应用程序开发(react- native
)和使用Node进行单元测试中特别有用。
一个history
实例有用于导航两种方法:push
和replace
。如果您将history
视为已访问位置的数组,push
则将一个新位置添加到该数组中,replace
并将该数组中的当前位置替换为新位置。通常,您将push
在导航时使用该方法。
在早期版本的阵营路由器,你必须创建自己的history
实例,但在第4版的<BrowserRouter>
,<HashRouter>
和<MemoryRouter>
组件将创建一个浏览器,哈希和内存的实例为您服务。React
Router history
通过router
对象下的上下文使与路由器关联的实例的属性和方法可用。
withRouter
高阶成分的withRouter
高次成分将注入的history
对象作为所述部件的支柱。这样一来,您无需处理即可访问push
和replace
方法context
。
import { withRouter } from 'react-router-dom'
// this also works with react-router-native
const Button = withRouter(({ history }) => (
<button
type='button'
onClick={() => { history.push('/new-location') }}
>
Click Me!
</button>
))
<Route>
该<Route>
组件不仅用于匹配位置。您可以渲染无路径路线,并且 该 路线 将始终与当前位置匹配
。该<Route>
组件传递与相同的道具withRouter
,因此您将能够history
通过history
道具访问方法。
import { Route } from 'react-router-dom'
const Button = () => (
<Route render={({ history}) => (
<button
type='button'
onClick={() => { history.push('/new-location') }}
>
Click Me!
</button>
)} />
)
但是你可能不应该
最后一个选项是只有在您熟悉使用React的上下文模型时才应使用的选项(React的Context
API从v16开始是稳定的)。
const Button = (props, context) => (
<button
type='button'
onClick={() => {
// context.history.push === history.push
context.history.push('/new-location')
}}
>
Click Me!
</button>
)
// you need to specify the context type so that it
// is available within the component
Button.contextTypes = {
history: React.PropTypes.shape({
push: React.PropTypes.func.isRequired
})
}
1和2是最简单的实现方法,因此对于大多数用例来说,它们是最好的选择。
问题内容: 我刚刚从v3 替换为v4。 但是我不确定如何以编程方式在的成员函数中进行导航。即在功能上我想导航到处理一些数据后。我曾经通过以下方式做到这一点: 但是我在v4中找不到这样的接口。 如何使用v4导航? 问题答案: 如果您定位到浏览器环境,则需要使用package而不是。他们按照相同的方法作出反应那样,以核心分开,( )和特定于平台的代码,( ,用细微的差别,你并不需要安装两个独立的包),
使用 lavas init 创建的模板项目中,在以下场景下都会以编程方式使用 Lavas: server.dev.js 开发环境下的 SPA/SSR 模式。 server.prod.js 生产环境下的 SSR 模式。 可见以编程方式使用 Lavas 的主要场景就是 SSR 模式,而在 SPA 模式下仅仅是供开发服务器使用。因此,如果开发者选择了 SSR 模式,阅读下面的内容将十分有帮助: 如何选择
问题内容: 我将Wicket与Wicket Auth Project一起用于表示层,因此将其与Spring Security集成在一起。这是Wicket调用的身份验证方法: 我的Spring Security XML配置的内容(里面)是: 2.3.6节。参考文档的会话固定攻击防护说: 会话固定攻击是一种潜在的风险,恶意攻击者有可能通过访问站点来创建会话,然后诱使另一个用户以相同的会话登录(通过向他
问题内容: 我一直在寻找这种解决方案已有一段时间,但是没有任何解决方案。例如一个解决方案是 此代码将添加带有“停止”图像的按钮。就像这样,还有其他解决方案,例如“搜索,刷新”等。但是 ,如果我想以编程方式在想要的图像上添加按钮,该怎么办? 问题答案: 自定义按钮图片,未设置按钮框: 您可以使用指定的图像和其他属性来初始化新项目。 检查此Apple文档。参考 UIBarButtonItem具有使用按
问题内容: 我正在尝试使用导航栏(“后退”按钮,标题等)和选项卡栏(底部的工具栏)制作一个应用程序。我使用的是子视图,因此不必担心状态栏,导航栏,标签栏的高度等问题。但是我认为这给我带来了麻烦,因为我似乎无法弄清楚如何设置导航栏和标签栏。 这就是我所拥有的。我究竟做错了什么? AppDelegate.h AppDelegate.m ViewController.h ViewController.m
问题内容: 我有一个带有标题的导航栏。当我双击文本以将其重命名时,它实际上说这是一个导航项,所以可能就是这样。 我正在尝试使用代码来更改文本,例如: 那显然不是我的代码,只是显示了它是如何工作的。 因此,每当我按下按钮时,我都希望标题更改。 问题答案: 您可以通过更改显示的视图控制器的标题来更改标题: 通常,这是在视图控制器上加载视图时完成的: 但是,这仅在将视图控制器嵌入UINavigation