javascript - “useNavigate”未从 'react-router-dom' 导出

标签 javascript reactjs react-router-dom

我正在尝试在我的 js 页面中使用 useNavigate 。这是我尝试使用它的方法:

import { loadStripe } from '@stripe/stripe-js';
import firebase from 'firebase';
import "firebase/auth";
import * as routes from '../routes';
import './checkout.css';
import React, { useState, useEffect } from "react";
import MyGifSpinner from './manageSubSpinner';
import './manageSubSpinner.css';
import ReactDOM from 'react-dom';
import myGif from '../pages/spinner';
import myGifSpinner from './manageSubSpinner';
import { doSignOut } from '../models/AuthorizationHome';
import {useNavigate} from 'react-router-dom';


const firestore = firebase.firestore();
const app = firebase.app();


export async function createCheckoutSession(activtyStatus){
  const navigate = useNavigate();

      let user = firebase.auth().currentUser;
    
      if (user == null) {
        navigate('/clients')
      }

  console.log(user)
 

  if (activtyStatus == "canceled") {
    console.log("sub is cancelled")
    //live price
    price = 'price_1IfmDsKDPaWWeL1ywjMTGarh'
    

  }
  
  console.log("activity status is: " + activtyStatus)

 


      const checkoutSessionRef = await firestore
      .collection('customers')
      .doc(user.uid)
      .collection('checkout_sessions')
      .add({
        price: price,
        success_url: "http://localhost:3000/clients",
        cancel_url: "http://localhost:3000/signin",
    });

    
      // Wait for the CheckoutSession to get attached by the extension
            checkoutSessionRef.onSnapshot(function (snap) {
              const { error, sessionId } = snap.data();
              if (error) {
              console.log(`An error occured: ${error.message}`);
              return;
            }
            if (sessionId) {
             
            const stripe = window.Stripe('pk');
            console.log("going to stripe: ")
           console.log("line 116 checkout.js")
            stripe.redirectToCheckout({sessionId: sessionId})
            console.log("logged stripe")
            
          }
      });
    }

但我仍然收到该错误。我使用的是react-router-dom版本5.2.0和react版本17.0.2。请帮忙:(

最佳答案

useNavigate 是 v6 中的一个新 Hook ,它取代了 useHistory Hook 。

React Router v6 Preview

由于您仍处于 v5,因此您应该导入并使用 useHistory Hook 来发出命令式导航。

React Router v5 Hooks

import { useHistory } from 'react-router-dom';

...

const history = useHistory();

const user = firebase.auth().currentUser;

useEffect(() => {
  if (!user) {
    history.push('/clients');
  }
}, [user]);

关于javascript - “useNavigate”未从 'react-router-dom' 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67275099/

相关文章:

javascript - 修改txt doc里面的 "string"值

reactjs - React Router 6,同时处理多个搜索参数

javascript - 触发链 promise

javascript - 使用突变响应更新 apollo 客户端

javascript - 错误 : Request failed with status code 403 - Problem with Axios, 可能用于获取交换

reactjs - props 数据在使用 react-native 的 componentDidMount 中不起作用

css - 无法让元素堆叠

javascript - react 路由器只显示主路由

javascript - 警告 : Failed prop type: Invalid prop `component` of type `object` supplied to `Route` , 预期 `function` 使用 react-router-dom 时出错

javascript - JS : from RGB Blue to RGB Red