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

在react router v4中更改URL而不使用重定向或链接[duplicate]

东门新立
2023-03-14

我在我的react应用程序中使用react router v4和material ui。我想知道一旦点击GridList中的网格块,如何更改URL。

我最初的想法是使用onTouchTap的处理程序。然而,我能看到的重定向的唯一方法是使用组件重定向链接。如何在不呈现这两个组件的情况下更改URL?

我尝试了this.context.router.push('/foo'),但似乎不起作用。

共有3个答案

宇文修文
2023-03-14

反应路由器v4

有几件事我需要让它顺利运行。

auth工作流上的文档页面有很多需要的内容。

然而,我有三个问题

  1. props.history从何而来?
  2. 我如何通过它传递给我的组件,它不直接在路由组件
  3. 如果我想要其他道具怎么办?

我最终使用了:

  1. 选项2来自“使用react路由器以编程方式导航”的回答,即使用

注意:使用render方法,您必须明确地通过Route组件的道具。出于性能原因(component每次强制重新加载),您还希望使用render而不是component

const App = (props) => (
    <Route 
        path="/home" 
        render={routeProps => <MyComponent {...props} {...routeProps}>}
    />
)

const MyComponent = (props) => (
    /**
     * @link https://reacttraining.com/react-router/web/example/auth-workflow
     * N.B. I use `props.history` instead of `history`
     */
    <button onClick={() => {
        fakeAuth.signout(() => props.history.push('/foo'))
    }}>Sign out</button>
)

我发现的一个令人困惑的事情是,在相当多的React路由器v4文档中,他们使用MyComponent=({匹配}),即。对象破坏,这意味着最初我没有意识到路由传递了三个道具,匹配位置历史

我认为这里的其他一些答案是假设一切都是通过JavaScript类完成的。

这里有一个例子,另外,如果您不需要传递任何道具,您可以使用组件

class App extends React.Component {
    render () {
        <Route 
            path="/home" 
            component={MyComponent}
        />
    }
}

class MyComponent extends React.Component {
    render () {
        /**
         * @link https://reacttraining.com/react-router/web/example/auth-workflow
         * N.B. I use `props.history` instead of `history`
         */
        <button onClick={() => {
            this.fakeAuth.signout(() => this.props.history.push('/foo'))
        }}>Sign out</button>
    }
}

杨星纬
2023-03-14

我用这个来重定向React路由器v4:

this.props.history.push('/foo');
楚方伟
2023-03-14

试试这个,

this.props.router.push('/foo')

警告适用于v4之前的版本

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

适用于v4及以上版本

 类似资料:
  • 问题内容: 如何在不重定向页面的情况下更改URL地址? 例如,当我单击下面的链接时: 我将从链接中获取URL: 如果我在下面这样做,页面将被重定向: 我想做一个类似此站点的操作,当您单击图像时,ajax调用将获取请求的页面,并且窗口上的URL地址也将被更改,因此它具有用于单击的路径。 问题答案: 注意:现在受支持-请参阅其他答案。 您 不能 更改整个URL而无需重定向,您可以做的是更改 hash

  • 子域应在codefile中查找但未更改URL的任务。有可能吗? 我尽量 但它肯定会导致URL的变化,但我不需要它。

  • 问题内容: 我想知道如何更改URL而不重定向,就像在我们的网站http://dekho.com.pk/ads-in- lahore 上那样, 当我们单击选项卡时url会更改,但是页面完全重新加载。在上还有其他问题,表明这是不可能的,但我想知道上述网站是如何实现的。谢谢 问题答案: 用途:

  • 我正在使用JSF2和PrimeFaces。我如何编写selectOneMenu,当用户更改菜单中的选项时,调用JSF导航将用户重定向到同一个页面,但参数不同?我只需要换颜色。 来自网址: MyView。xhtml:(无工作) ManagedBean:

  • 有可能是这样的深层链接吗我有这样的链接http://example.com/shortlink当它被打开到浏览器时,它将重定向到http://example.com/product?id=123然后在那里,我将打开我的应用程序,直接转到id为123的产品 我有这样的想法 [IntentFilter(新[]{Intent.ActionView}, Categories=new[]{Intent.Ca

  • 问题内容: 我正在处理的应用程序包含各种状态(使用ui-router),其中某些状态要求您登录,而其他状态则公开可用。 我创建了一种方法,该方法可以有效地检查用户是否已登录,当前遇到的问题实际上是在必要时重定向到我们的登录页面。应该注意的是,登录页面当前未放置在AngularJS应用中。 console.log会正确显示预期的URL。之后的那一行,我几乎尝试了从$ window.open到wind