reactjs 我使用元素而不是路由,因为我使用条带进行在线支付

ie3xauqp  于 2023-02-18  发布在  React
关注(0)|答案(3)|浏览(106)

错误:[Elements]不是<Route>组件。<Routes>的所有子组件必须是<Route><React.Fragment>

import { Elements } from "@stripe/react-stripe-js";
import { loadStripe } from "@stripe/stripe-js";

<Elements stripe={loadStripe(stripApikey)}>
  <Route
    path="/process/payment"
    element={
      <ProtectedR>
        <Payments />
      </ProtectedR>
    }
  />
</Elements>

我包裹所有路线一样,<Route path="/process/payment" element={<ProtectedR ><Elements stripe={loadStripe(stripApikey)}><Payments /></Elements></ProtectedR>} />,但在其给我的支付文件错误× Error: Could not find Elements context; You need to wrap the part of your app

c8ib6hqw

c8ib6hqw1#

React路由器,版本6

  • 因为[Elements]不是<Route>组件,所以它不能 Package 在<Route>内。这意味着Elements应该放置在<Route>之外。
  • <Routes>的所有子组件必须是<Route>

因此,如果存在<Route>组件,则必须将其 Package 在<Routes>周围。
上述语句会导致以下语法(在您的情况下,存在受保护路由):

<Elements stripe={loadStripe(stripeApiKey)}>
    <Routes>
        <Route exact path="/process/payment" element={<ProtectedRoute />}>
            <Route exact path="/process/payment" element={<Payments />} />
        </Route>
     </Routes>
</Elements>
r1zk6ea1

r1zk6ea12#

{stripeApiKey && (
   <Route path='/process/payment' 
   element={
  <ProtectedRoute>
  <Elements stripe={loadStripe(stripeApiKey)}>
  <Payment />
  </Elements>
  </ProtectedRoute>
    } />
 )}
qnakjoqk

qnakjoqk3#

这个错误很明显:在<Router>内,所有直接子节点必须是路由。
<Elements> Package 移动到element={...}内部。

<Route
  path="/process/payment"
  element={
    <ProtectedR>
      <Elements stripe={loadStripe(stripApikey)}>
        <Payments />
      </Elements>
    </ProtectedR>
  }
/>

相关问题