【发布时间】:2022-01-24 03:26:27
【问题描述】:
当我 console.log qty(在下面的代码中)时,我看到 No routes matched location "/cart" (来自浏览器控制台)而不是 qty 的值。在 react-router-dom v5 中,通过将位置作为道具传递给组件,一切正常,但这在 v6 中不起作用。以下代码块在 router-dom v5 中工作:
export function CartScreen({ match, location, history}) {
const qty = location.search ? Number(location.search.split("=")[1]): 1
console.log('qty:', qty)
return (
<div>
<h1>Add to CART</h1>
</div>
)
}
添加到购物车处理程序:
const addToCartHandler = () =>{
history(`/cart/${match.id}?qty=${qty}`)
}
<Button type='button' onClick={addToCartHandler} > Add To Cart </Button>
但是,上面的代码在 router-dom v6 中无效,所以我尝试通过将其更改为以下代码来达到相同的结果(但它不起作用):
const CartScreen = () => {
const match = useParams()
const location = useLocation();
const productID = match.id
const qty = location.search ? Number(location.search.split("=")[1]): 1
console.log('qty:', qty)
return (
<div>
<h1>Add to CART</h1>
</div>
)
}
App.js
function App() {
return (
<Router>
<Routes>
<Route path='/cart/:id?' element={<CartScreen/>} />
</Routes>
</Router>
);
}
export default App;
主要问题在于我在路由器 dom v 6 中使用 location 的方式。
【问题讨论】:
-
这个
CartScreen是在带有id路由参数的路由上渲染的吗?你能分享一下你是如何渲染路由和路由组件的吗? -
是的,我刚刚更新了代码,请检查
-
好的,所以
CartScreen和id路由参数应该没问题。什么抱怨缺少"/cart"路线?您的路径上也不应该有尾随"?"。 -
由于路径中的id是可选的,所以当指定商品数量时,就像用户点击添加到购物车时一样,数量的值应该附加到url。数量未附加到“/购物车”。问题在于 `react-router-dom 位置。我不确定如何在 v6 中实现 location.search
-
@Drew Reese,我想到了更好的方法来作为问题,我再次更新了帖子
标签: reactjs react-router react-router-dom