cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menggunakan makluman tersuai dalam React untuk menukar tab?

Saya sedang mencipta satu react-router 提示,所以在这里我想在您想从一个选项卡切换到另一个选项卡时应用警报消息。我已经应用了警报属性,因为我创建了一个函数 confirmSwitchTab tetapi ia tidak berfungsi. Bagaimanakah saya boleh membuat gesaan itu supaya apabila saya ingin menukar dari satu tab ke tab yang lain dalam setiap laluan, ia memaparkan mesej.

import { React, useState } from "react";
import { Link } from "react-router-dom";
import LoadingBar from "react-top-loading-bar";
import { useNavigate } from "react-router-dom";

export default function Demo() {
  const [progress, setProgress] = useState(0);
  const navigate = useNavigate();

  function confirmSwitchTab() {
    //Prompt the user with a confirm message.
    var result = confirm("Are you sure you want to switch tabs?");
    //If the user confirms, return true, else return false.
    if (result) {
      return true;
    } else {
      return false;
    }
  }

  const onClick = () => {
    const userConfirmsSwith = confirmSwitchTab()
    if (userConfirmsSwith) navigate("/")
    // else you don't do anything.
  }

  return (
    <>
      <LoadingBar
        color="blue"
        progress={progress}
        onLoaderFinished={() => setProgress(0)}
        waitingTime={800}
        loaderSpeed={100}
        height={4}
      />
      <ul
        style={{
          display: "flex",
          justifyContent: "space-around",
          listStyle: "none"
        }}
      >
        <li>
          <Link
            to="/"
            onClick={() => {
              onClick();
              setTimeout(() => setProgress(100), 500)
            }}
          >
            Home
          </Link>
        </li>
        <li>
          <Link
            to="/about"
            onClick={() => {
              onClick();
              setTimeout(() => setProgress(100), 500)
            }}
          >
            About
          </Link>
        </li>
      </ul>
    </>
  );
}

P粉744831602P粉744831602283 hari yang lalu356

membalas semua(2)saya akan balas

  • P粉564301782

    P粉5643017822024-02-04 15:50:08

    Ia tidak berfungsi kerana kod itu tidak menghalang tindakan pautan lalai daripada berlaku. Apabila pautan diklik, tindakan navigasi akan berkuat kuasa serta-merta semasa pengendali onClick yang dilampirkan menjalankan logik lain.

    Pengendali klik juga harus menggunakan objek acara klik dan panggil preventDefault padanya untuk menghentikan tindakan navigasi daripada berlaku.

    export default function Demo() {
      const [progress, setProgress] = useState(0);
      const navigate = useNavigate();
    
      function confirmSwitchTab() {
        //Prompt the user with a confirm message.
        return confirm("Are you sure you want to switch tabs?");
      }
    
      const clickHandler = (target = "/") => (e) => {
        e.preventDefault(); // <-- halt link navigation
    
        setTimeout(() => setProgress(100), 500);
    
        if (confirmSwitchTab()) {
          navigate(target);
        }
        // else you don't do anything.
      }
    
      return (
        <>
          
          
    • Home
    • About
    ); }

    balas
    0
  • P粉914731066

    P粉9147310662024-02-04 12:11:39

    Saya percaya terdapat salah faham di sini tentang cara onLeave berfungsi :-)

    Membalas benar tidak akan "mengesahkan operasi cuti". Apapun, permintaan cuti akan disahkan. Atribut onLeave hanya akan mengambil fungsi dan mencetuskannya apabila anda meninggalkan halaman. Fungsi ini boleh menjadi petunjuk, seperti di sini, tetapi nilai yang dikembalikan tidak akan digunakan.

    Apa yang anda ingin capai mesti diselesaikan sebelum halaman itu benar-benar keluar. Di suatu tempat dalam apl anda, anda sepatutnya mempunyai menu navigasi di mana anda sebenarnya boleh menukar halaman dengan mengklik butang (biasanya menggunakan

    history.push("My/New/Path")

    )

    Sekarang di sinilah anda akan menggunakan fungsi tersebut.

    Andaikan anda mempunyai sesuatu yang serupa

    Anda ingin memanggil fungsi confirmSwitchTab dalam panggilan balik ini.

    Anda boleh menukarnya kepada sesuatu seperti ini

    const onClick = () => {
      const userConfirmsSwith = confirmSwitchTab()
      if (userConfirmsSwith) history.push('home')
      // else you don't do anything.
    }
    
    

    Semoga ini membantu, sila beritahu saya jika soalan saya salah!

    Sola

    Selepas mengedit soalan

    Cuba ini:

    import { React, useState } from "react";
    import LoadingBar from "react-top-loading-bar";
    import { useNavigate } from "react-router-dom";
    export default function Demo() {
      const [progress, setProgress] = useState(0);
      const navigate = useNavigate();
      function confirmSwitchTab() {
        //Prompt the user with a confirm message.
        var result = confirm("Are you sure you want to switch tabs?");
        //If the user confirms, return true, else return false.
        if (result) {
          return true;
        } else {
          return false;
        }
      }
      const onClick = (path) => {
        setTimeout(() => setProgress(100), 500)
        const userConfirmsSwith = confirmSwitchTab()
        if (userConfirmsSwith) navigate(path)
        // else you don't do anything.
      }
      return (
        <>
           setProgress(0)}
            waitingTime={800}
            loaderSpeed={100}
            height={4}
          />
          
    ); }

    balas
    0
  • Batalbalas