JIYIK CN >

Current Location:Home > Learning > WEB FRONT-END > React >

Programmatic navigation with React Router DOM

Author:JIYIK Last Updated:2025/03/03 Views:

React is famous for its declarative style. Of course, methods also play an important role.

It is this combination of abstraction and method functionality that makes React so powerful.

The most popular JavaScript libraries today use a declarative approach to building interfaces. React is special because it allows you to build UIs without directly manipulating the DOM.

Despite this high level of abstraction, React still makes room for JavaScript expressions in JSX, the language used to build interfaces.

React Router is the most popular library for navigating React applications. The library provides a <Link>component that allows developers to create links declaratively, allowing you to navigate to specific URLs seamlessly.

Most of the time, you want to change the URL after clicking a link. However, sometimes this default behavior is not enough, and you, the programmer, may need to redirect the user to another URL.

React Router also opens the door to programmatic navigation. Developers can navigate programmatically by manipulating the history stack.

The library follows the concept of client-side routing, which allows developers to bypass the browser's default behavior and change the URL without sending a request to the server.

To programmatically navigate a React application, first, you must access historythe React object. There are two ways to access this object: BrowserRouterreceiving it as a prop from a React component, or using .useHistory()React hooks.

历史The object can have many different uses. In this case, we are concerned with three methods it provides: push(), , pop()and replace().

React developers can use these to manipulate URLs programmatically.

.push()The most common and useful way to change URLs programmatically. Let’s know how to perform this operation in different versions of React Router.

This version does not include useHistorythe hook, so the only option is to access historythe object through props. You cannot do this in any React class component.

The component must be rendered by a <BrowserRoute>(often abbreviated as <Route>) component in order to access historythe property.

Let’s look at an example.

export default class Sample extends Component {
  render() {
    return (
      <Router>
        <Route path="/" component={App}></Route>
      </Router>
    );
  }
}

class App extends Component {
  render() {
    return (
      <button onClick={() => this.props.history.push("samplePath")}>
        Change the URL
      </button>
    );
  }
}

AppThe component has one element, a button with an event listener. We access the object in props historyand call its .push()method with one argument: the path we want to navigate to.

However, our component's props object only contains the history object becauseThe component will render it.

react-routerThe core React library underwent major changes when version 5.1.0 was released. React version 16.8 introduced powerful hooks that provide more functionality to functional components.

In response to these changes, react-routerthe developers behind version 5.1.0 introduced useHistory()the hook to give functional components easy access to historythe object.

Let's look at this example.

export default function Sample(props) {
  return (
    <BrowserRouter>
      <Route>{<App></App>}</Route>
    </BrowserRouter>
  );
}

function App(props) {
  let historyReference = useHistory();
  return (
    <button onClick={() => historyReference.push("boo")}>
      Navigate Programmatically in React Router 5.1.0+
    </button>
  );
}

In this case, the parent Samplecomponent looks more or less the same as before. It has one child, the function component App.

Child is very different from the previous examples. It's a function component, not a class component like before. And we don't access historythe object through props; instead, we use useHistory()the hook.

请注意, if the component is not a custom component subcomponent, the history<Route> object cannot be accessed even with hooks . Hooks only change the way we access the history object.useHistory()

In the example above, we historystore the object returned by the hook historyReferencein the variable. We then call the method on the variable .push()and provide a parameter to specify the path.

useHistory()historyHooks are the simplest way to access the object when writing functional components .

If you prefer to use class components, you can still use the solution described in the previous section even if your react-routerinstallation is version 5.1.0 or higher.

react-routerThe latest version of contains a new and improved useNavigate()hook. It returns a function specifically for programmatic navigation.

The latest React Router documentation recommends using this hook to programmatically change the URL.

function NavigateApp(){
  let navigate = useNavigate();
  return (
    <button onClick={() => navigate("boo")}>
      Navigate Programmatically in React Router 6.1.0+
    </button>
  );
}

It works in useHistory()much the same way as Hooks. useHistory()Unlike Hooks, there are a few differences: it returns a function, not a reference to an object.

navigateInstead of calling the object's method, we store the function in a variable to call it directly .push(). It takes the same arguments as the above method, a string specifying the target path.

For reprinting, please send an email to 1244347461@qq.com for approval. After obtaining the author's consent, kindly include the source as a link.

Article URL:

Related Articles

How to reverse an array in React

Publish Date:2025/03/13 Views:198 Category:React

在 React 中反转数组:使用扩展语法 `(...)` 创建数组的浅表副本。在副本上调用 `reverse()` 方法。将结果存储在变量中。

Setting data attributes in React

Publish Date:2025/03/13 Views:84 Category:React

要在 React 中为元素设置 data 属性,请直接在元素上设置属性,例如 或使用 setAttribute() 方法,例如 el.setAttribute('data-foo', 'bar')。 我们可以访问事件对象上的元素或

Toggle a class on click in React

Publish Date:2025/03/13 Views:153 Category:React

要在 React 中单击时切换类:在元素上设置 onClick 属性。将活动状态存储在状态变量中。使用三元运算符有条件地添加类。

Sorting an array of objects in React

Publish Date:2025/03/13 Views:77 Category:React

在 React 中对对象数组进行排序: 创建数组的浅拷贝。 调用数组的 `sort()` 方法,传递给它一个函数。 该函数用于定义排序顺序。

Generate a random number in React

Publish Date:2025/03/13 Views:189 Category:React

使用 Math.random() 函数在 React 中生成一个随机数,例如 Math.floor(Math.random() * (max - min + 1)) + min。 Math.random 函数返回 0 到小于 1 范围内的数字,但也可用于生成特定范围内的数字。

Open links in new tabs with React

Publish Date:2025/03/13 Views:76 Category:React

要在 React 的新选项卡中打开链接,请使用 a 元素并将其 `target` 属性设置为 _blank,例如 。 _blank 值表示资源已加载到新选

How to set target=_blank in React

Publish Date:2025/03/13 Views:199 Category:React

要在 React 中将元素的目标属性设置为 _blank,请使用锚元素并设置 rel 属性,例如 。 _blank 值表示资源已加载到新选项卡中。

Showing hover elements in React

Publish Date:2025/03/13 Views:177 Category:React

要在 React 中显示悬停元素:在元素上设置 `onMouseOver` 和 `onMouseOut` 属性。 跟踪用户是否将鼠标悬停在状态变量中的元素上。 根据状态变量有条件地渲染其他元素。

Passing components as props in React

Publish Date:2025/03/13 Views:164 Category:React

我们可以使用内置的 children 属性在 React 中将组件作为属性 props 传递。 我们在组件的开始标签和结束标签之间传递的所有元素都会分配给 children 属性。

Scan to Read All Tech Tutorials

Social Media
  • https://www.github.com/onmpw
  • qq:1244347461

Recommended

Tags

Scan the Code
Easier Access Tutorial