@aniyajs/plugin-router
Version:
基于 react-routerV6 封装的路由插件服务于aniyajs自动化脚手架
84 lines (72 loc) • 2.1 kB
JavaScript
import { useNavigate } from "react-router-dom";
function useHistory() {
const navigate = useNavigate();
/**
* 使用给定的路径替换当前的浏览历史记录。
* @param pathname 要导航到的新路径,作为字符串提供。
* @param props {object} 导航的其他属性。
* @returns 调用navigate函数的返回值,该函数负责执行实际的导航操作。
*/
function replace(pathname, props) {
const params = new URLSearchParams();
if (props && props.data && Object.keys(props.data).length) {
for (const key in props.data) {
const ele = props.data[key];
params.append(key, ele);
}
}
// 构造完整路径
const search = params.toString() ? `?${params.toString()}` : '';
navigate({
pathname,
search,
replace: true,
state: (props && props.state) || {},
});
}
/**
* 将用户导航到指定的路径。
* @param pathname {string} 需要导航到的路径。
* @param props {object} 导航的其他属性。
* @returns 调用navigate函数的返回值,具体返回值类型依赖于navigate函数的实现。
*/
function push(pathname, props) {
const params = new URLSearchParams();
if (props && props.data && Object.keys(props.data).length) {
for (const key in props.data) {
const ele = props.data[key];
params.append(key, ele);
}
}
const search = params.toString() ? `?${params.toString()}` : '';
return navigate({
pathname,
search,
replace: false,
state: (props && props.state) || {},
});
}
/**
* 返回上一页
* 该函数没有参数。
* @returns {Promise<void>} 一个导航到前一页的Promise。
*/
function goBack() {
return navigate(-1);
}
/**
* go函数 - 根据提供的数字进行导航
* @param num {number} 导航的目标位置编号
* @returns 返回导航操作的结果
*/
function go(num) {
return navigate(num);
}
return {
replace,
push,
goBack,
go,
};
}
export default useHistory;