作为React的新手,我面临着在两个组件之间导航的问题。
我的应用程序如下:App.js:
<div className="App">
<AuthProvider>
<ThemeProvider theme={theme}>
<CssBaseline />
<CartProvider>
<SiteHeader/>
<div>
<Routes>
{getRoutes(routes)}
<Route path="/auth" element={<AuthPage />} />
<Route path="/cart" element={<CartPage />} />
<Route path="/search_results" element={<SearchResultPage />} />
<Route exact path="/_healthz" element={<HealthPage />} />
<Route path="/orders" element={<OrderPage />} />
<Route path="/category/:id" element={<CategoryPage />} />
<Route path="/product/:id" element={<ProductPage />} />
<Route path="/recipe/:id" element={<RecipePage />} />
<Route path="/" element={<HomePage />} />
</Routes>
</div>
</CartProvider>
</ThemeProvider>
</AuthProvider>
</div>
可以看到,每个页面上都有SiteHeader组件。在这个SiteHeader组件上,我有一个搜索字段,触发一个navigation()到SearchResultPage虽然导航本身正在工作(SearchResultPage正在显示),但是传递给navigate()的参数没有被传播:
const search = () => {
console.log("Calling search =>" + searchTerm);
navigate("/search_results",{ state: { searchText: searchTerm }});
}
下面的代码部分SearchResultPage:
export default function SearchResultPage(props) {
console.log(props);
let searchText = props.location.searchText
我不明白为什么props是空的尽管我正确地填充了导航(路径,状态)
react-router-dom
v6通过元素prop渲染的路由组件不接收路由道具。
你可以使用hook来获取你正在导航到那个页面的状态,通过传递一些状态值,如下所示:
const location = useLocation();
const searchText = location?.state?.searchText;
要获得state
,您需要访问props.location.state
,然后如果您使用v5
或以下,则需要访问随后的状态属性。
改变这一行:
let searchText = props.location.searchText
let searchText = props.location.state.searchText