我知道我可以使用useNavigate()钩子中的navigate(-1)来导航到上一页,但使用navigate(-1,{state:state})似乎行不通,因为当我转到上一页时,我会得到一个空值.

推荐答案

navigate函数有两个函数签名,一个接受tooptions个参数,另一个接受单个delta个参数.在执行增量导航时,不传递任何状态,您只是在历史堆栈中向前或向后"移动".

declare function useNavigate(): NavigateFunction;

interface NavigateFunction {
  (
    to: To,
    options?: {
      replace?: boolean;
      state?: any;
      relative?: RelativeRoutingType;
    }
  ): void;
  (delta: number): void;
}

建议的解决方案

从"上一个"页面,您可以向前导航并传递"Referrer"值,该值是"当前"页面判断的状态.如果存在state.referrer,则使用它发出导航操作并传递任何状态,否则将增量导航发回用户所在的任何先前页面.

上一页:

<Link to="/next-page" state={{ referrer: "/this-page" }}>
  Next page
</Link>
navigate("/next-page", { state: { referrer: "/this-page" } });

下一页:

const { state } = useLocation();

...

if (state.referrer) {
  navigate(state.referrer, { state: { /* state you want to pass back */ } });
} else {
  navigate(-1);
}

Reactjs相关问答推荐

为什么我无法访问窗口事件处理程序中的状态?

如何使用Reducer更新全局变量

是否将样式应用于父悬停(框架运动)上的子元素?

如何在关闭和打开此 Select 输入时应用旋转效果?

有没有一种惯用的方式来接受特定的子元素?

如何在物料界面react 的多选菜单中设置最大 Select 数限制

.populate() 方法在 mongodb 中不起作用

我无法通过 useContext 显示值

如何解决使用react-hook-form和yup动态创建的输入不集中的问题

解决在React测试库中的act()警告

i18next中复数键的理解

从服务器获取数据时未定义,错误非法调用

添加新行时自动打开可扩展表格(Antd 表格,ReactJS)

更新 Next.js 路由查询更改的状态会导致无限循环

在 Remix 中使用 chartjs 和 react-chartjs-2 会出现错误react-chartjs-2未在您的 node_modules 中找到

如何使用react 路由将 url 参数限制为一组特定的值?

将 Material UI 菜单渲染为

是什么导致了这个令人惊讶的数组导致 React

单击当前子div时如何更改p标签的图像和样式?react

为什么这两个 div 的渲染方式不同?