在 react-router v5 中,我创建了这样的历史对象:
import { createBrowserHistory } from "history";
export const history = createBrowserHistory();
然后将其传递给路由器:
import { Router, Switch, Route, Link } from "react-router-dom";
<Router history={history}>
... my routes
</Router>
我这样做是为了有机会在组件之外使用历史记录:
// store action
logout() {
this.user = null;
history.push('/');
}
通过这种方式,我将逻辑移至商店,并尽可能保持组件干净。但是现在,在 React Router v6 中我不能做同样的事情。我仍然可以在我的组件内使用 useNavigate()
进行导航,但我无法创建 navigate
以将其用于我的商店。还有其他选择吗?
原文由 kofyohugna 发布,翻译遵循 CC BY-SA 4.0 许可协议
好吧,事实证明,如果您实现一个以与 RRDv6 路由器相同的方式实例化历史状态的自定义路由器,您 就可以 复制该行为。
例如检查 BrowserRouter 实现:
useLayoutEffect(() => history.listen(setState), [history]);
return (
);
};
export default function App() { return (
} />
} />
);
}
import { createBrowserRouter } from ‘react-router-dom’;
const router = createBrowserRouter(…);
…
router.navigate(targetPath, options);
”`