reactjs 使用React Router v6从不同组件侦听组件的状态更改

6za6bjd0  于 2023-02-08  发布在  React
关注(0)|答案(1)|浏览(231)

我有一个Page组件,它在App中使用</Outlet>呈现。在Page组件中,我想使用一个在App中设置的状态(通过搜索input提供的简单文本)。
我能够通过从App执行的navigate("/page", { state: { searchQuery } });Page挂载期间发送和接收状态,但不幸的是,当searchQuery的状态发生变化时,这种方法失败了。
是否有一种简单的机制允许Page侦听React Router v6中App selectQuery状态的更改?如果有,解决方案是什么?

// index.tsx
const router = createBrowserRouter(
  createRoutesFromElements(
    <Route path="/" element={<App />}>
      <Route path="page" element={<Page />}></Route>
    </Route>
  )
);
// App.tsx 
function App() {
  const [searchQuery, setSearchQuery] = useState<string>("");

  return (
    // ...
    <AppBar component="nav">
      // Input text field which sets setSearchQuery onChange
    </AppBar>
    // ...
      <Outlet />
    // ...
}
// Page.tsx
function Page() {
  //...
  return (
    // ...
    // usage of a App searchQuery 
    // ...
}
ymzxtsji

ymzxtsji1#

您可以使用Outlet上下文来完成此操作:

function App() {
  const [searchQuery, setSearchQuery] = useState<string>("");

  return (
    // ...
    <AppBar component="nav">
      // Input text field which sets setSearchQuery onChange
    </AppBar>
    // ...
      <Outlet context={searchQuery}>
    // ...
  )
}
import { useOutletContext } from 'react-router-dom';

function Page() {
  const searchQuery = useOutletContext();

  return (
    // ...
    // usage of a App searchQuery 
    // ...
  )
}

有关详细信息,请参阅此文档:https://reactrouter.com/en/6.8.0/hooks/use-outlet-context

相关问题