History
从程序中控制路由是依靠 React Router DOM 提供的 History 对象。每个路由组件的props
中都会注入一个键值为history
的 History 对象,用于提供路由的控制。History 对象主要提供了以下方法来供使用。
.length
,表示 History 栈的长度。.action
,表示导航到当前路由的操作,取值为PUSH
、REPLACE
或者POP
等。.location
,获取用于描述当前位置的对象。由于 History 对象是可变的,所以.location
获取的当前位置描述并不可靠,可以直接访问props
中的location
对象代替。location
对象提供了以下功能供使用:.pathname
,当前位置的路径。.search
,当前位置的查询串。.hash
,当前位置的 Hash 前缀。.state
,当前位置的状态量。可以通过 History 对象的.push(path, state)
设置。
.push(path, [state])
,导航到指定位置,并向 History 栈中推入一条记录。.replace(path, [state])
,导航到指定位置,清空 History 栈并推入一条记录。.go(n)
,将 History 栈指针向栈顶移动n
位,n
为负值为向栈底移动。.goBack()
,将 History 栈指针向栈底移动一位,即后退一步。.goForward()
,将 History 栈指针向栈顶移动一位,即前进一步。.block(prompt)
,阻止导航并弹出提示,返回一个函数供解除阻止使用。
class CargoComponent extends React.Component {
constructor(props) {
super(props);
}
render() {
return <button onClick={() => this.props.history.push('/login')}>Click Me</button>;
}
}
注意,要从组件的props
中访问 History 对象或者 Location 描述对象,组件必须是在 Route 的component
中指定的路由组件。如果需要在其他组件中使用 History 对象或者 Location 描述对象,需要使用下一节中的withRouter
。