【问题标题】:React Router and browser historyReact 路由器和浏览器历史记录
【发布时间】:2021-11-01 03:06:17
【问题描述】:

我完全迷失了,想寻求有关如何在我的应用中实现浏览器历史记录的建议。

使用路由器,我只有一个组件,它会根据我所在的页面分配页面。应用程序内的页面和文本是从 api 获取的,每当我单击按钮时,都会再次调用 api。

<Router>
<Switch>
<Route to="/" component={Body} />
...

这可能甚至无法正常工作,因为链接标签位于按钮上,它们指向 /page/number:

const renderPageNumbers = apiPagingSliced.map((links, index)  => {
        return <Link key={index} to={`/page/${links.label}`}>
                <button key={index} id={links.label} 
                onClick={props.handleClick} 
                className={(links.active ? "mark-page" : "") + " " + (links.url === null ? "remove-btn" : "")}
                >{links.label}
                </button></Link>
    }
    )

我已经设法让它工作,例如我得到“www.webpage.com/page/3”。但是当我在浏览器中按回时,它只会将 url 更改为上一页,不会做任何其他事情。如何实现功能性的后退/前进历史功能?

【问题讨论】:

    标签: javascript reactjs react-router history


    【解决方案1】:

    首先你应该添加路由参数示例:“/:id”

    <Route to="/some_page/:id" component={SomePage} />
    

    然后从 react-router 导入 useHistory 和 UseParams :

    import { useHistory, useParams } from "react-router-dom";
    
    let { id } = useParams();
    
    let history = useHistory();
    
    
    <button  onClick={() => history.push(`/some_page/${id}`)}> Go to page </button>
    

    【讨论】:

    • 嘿,谢谢你的回答。如果我没有单独的“页面”组件,这将如何工作?我有主要的类组件 - Body,它连接到一个评估页面和页面按钮并具有按钮 ID 的功能组件。所以我调用 {Body} 而不是 {SomePage},但 id 位于函数组件中。不知道如何连接它
    【解决方案2】:

    首先你应该添加一个路由到/page/(some number)

    这是这样完成的:

    <Router>
    <Switch>
    <Route to="/" component={Body} />
    <Route to="/page/:id" component={Page} />
    ...
    

    现在在 Page 组件中导入一个名为 useParams 的反应路由器 dom 钩子

    import { useHistory } from 'react-router-dom'
    
    const Page = () => {
    
      const history = useHistory()
    
      //pageID will be equal to the page number
    
      return (
        <div>
          <button onClick={event => history.goBack`}>Go back!</button>
        </div>
      )
    }
    

    【讨论】:

    • 嘿,谢谢你的回答,但如果我没记错的话,这是一个返回一页的新按钮,对吧?我在问浏览器左上角的后退和前进按钮
    • @hackinghippie 哦,对不起。尝试使用另一个名为 useHistory 的 react-router-dom 钩子。我编辑了我之前的答案,看看。
    • 非常感谢您帮助我 :) 但我尝试解决它,但它仍然无法正常工作。问题是,我没有单独的页面组件。这一切都在 Body.js 类中。 Body 连接到 Paging 组件,在该组件中创建按钮、分配数字和 id,然后返回到 Body。所以我需要达到那个分页功能。
    猜你喜欢
    • 2016-08-16
    • 2017-10-19
    • 1970-01-01
    • 2017-08-17
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2022-07-25
    相关资源
    最近更新 更多