reactjs 无法将添加到购物车处理程序的URL与app.js中的路径('/cart/:id')匹配

vmdwslir  于 2022-12-29  发布在  React
关注(0)|答案(3)|浏览(174)

using react-router-dom v 6.我没有合适的词来表达这个问题,但问题是addToCart处理程序的url在app.js中找不到addToCart路径。例如,当我单击ID为2的产品时,我在控制台No routes matched location "/cart/2?qty=1"中得到这个错误显示。

function ProductScreen({}) {
    const [qty, setQty] = useState(1)

    const history = useNavigate()
    const match = useParams();
    const dispatch = useDispatch()
    const productDetails = useSelector(state => state.productDetails)
    const {error, loading, product} = productDetails

    useEffect(() => {
        dispatch(listProductDetails(match.id))
    }, [dispatch, match])

    const addToCartHandler = () =>{
        history(`/cart/${match.id}?qty=${qty}`)
    }
    return(
        <Button onClick={addToCartHandler} Add To Cart </Button>
    )
}

推车屏幕

const CartScreen = () => {
    const { id } = useParams();
    const { search } = useLocation();
    const [searchParms] = useSearchParams();
  
    const productId = id;
    const qty = search ? Number(search.split("=")[1]) : 1;
  

    const dispatch = useDispatch()

    useEffect(() => {
      if (productId){
        dispatch(addToCart(productId, qty))
      }
    
    }, [dispatch, productId, qty])

    
    return (
      <div>
        <h1>Add to CART</h1>
      </div>
    );
  };
  
  export default CartScreen

App.js

function App() {
  return (
    <Router>
      <Routes>
        <Route path='/product/:id' element={<ProductScreen/>} />
        <Route path='/cart/:id' element={<CartScreen/>} />
        <Route path='/cart/' element={<CartScreen/>} />
      </Routes>
    </Router>
  );
}

<Route path='/cart/:id' element={<CartScreen/>} />更改为<Route path='/cart/:id?' element={<CartScreen/>} />并不能解决这个问题。请注意,我测试的这两个路由的不同之处在于第二个路由的路径中的?

dgiusagp

dgiusagp1#

假设你的代码片段被复制/粘贴到一个运行正常的codesandbox中,但是同样的代码在本地不能运行,你仍然会看到一个不变的错误No routes matched location "/cart/2?qty=1",我建议你完全重新启动。路径"/cart/2"应该是匹配的。
我通常采取的调试/故障排除步骤:

  • 终止任何正在运行的代码监视器/热加载程序,并完全清除浏览器缓存,然后重新启动开发构建(npm start
  • 完全关闭/重新打开浏览器,然后再次运行生成
  • 试着在匿名窗口运行它们
  • 重新启动运行代码的计算机
juud5qan

juud5qan2#

常量数量=搜索?编号(搜索.拆分("=")[1]):1个;
替换此
let qty = location.search ? Number(search.split("=")[1]) : 1;
然后将产品ID与ID

ykejflvf

ykejflvf3#

以下是我所做的:
use use在产品屏幕中导航

const navigate = useNavigate()

那么处理器

const addToCartHandler = () => {
        navigate(`/cart/${id}?qty=${qty}`)
    }

在app.js文件中,将路由添加为:

<Route path='/cart/:id?' element={<CartScreen />} />

这应该会有帮助

相关问题