跳到正文

路由

声明路由,在当前窗口中渲染匹配结果,并用链接或 useNavigate 导航。

#路由声明

import { Router, Route, Link } from "@quickgui/solid/router";

<Router initialPath="/">
  <Route path="/" component={() => <Link href="/settings">Settings</Link>} />
  <Route path="/settings" component={() => <Text>Settings</Text>} />
  <Route path="/projects/:id" component={Project} />
</Router>

#嵌套布局

嵌套路由相对于父路由。在下一个匹配路由应出现的位置渲染 <Outlet />。无路径的路由可以提供共享布局,而不增加 URL 片段。

<Route path="/" component={Shell}>
  <Route path="/" component={Home} />
  <Route path="/settings" component={Settings} />
</Route>

function Shell() {
  return (
    <View style={{ flexCol: true, gap: 12 }}>
      <Link href="/">Home</Link>
      <Link href="/settings">Settings</Link>
      <Outlet />
    </View>
  );
}

#导航

const navigate = useNavigate();
<Button onClick={() => navigate("/projects/42")}>Open project</Button>
<Link href="/">Home</Link>

路由器支持 push、replace、back 和 forward。导航留在应用内部。

#路由参数

function Project() {
  const params = useParams();
  return <Text>Project {params.id}</Text>;
}

useLocation() 和 useSearchParams() 同样返回响应式对象。在 JSX 中读取 location.pathname 和 searchParams.tab,文本才会保持最新。