React tsx generiert einen zufälligen Bestätigungscode

React tsx generiert einen zufälligen Bestätigungscode

React tsx generiert einen zufälligen Bestätigungscode zu Ihrer Referenz. Der spezifische Inhalt ist wie folgt

Ich habe kürzlich React mit tsx entwickelt. Ich habe kein gutes Plugin zum zufälligen Generieren von Bestätigungscodes gefunden, also habe ich selbst eines erstellt. Und hier ist ohne weitere Umschweife der Code.

Die tsx-Datei sieht wie folgt aus:

React-Codeausschnitt.

importiere * als React von „react“;

Konstantengröße = 4;
const Verifizierungscode = {
    Breite: "32%",
    Höhe: "32px",
    marginLeft: "5%",
    Anzeige: „Inline-Block“,
    position:"absolut" als "absolut",
    oben: "0",
    rechts:"0",
}
exportiere Standardklasse InputVerify erweitert React.Component<any, any> {
    Konstruktor(Requisiten) {
        super(Requisiten);
        dieser.Zustand = {
            Optionen:
                id: "verifycode", //Container-ID
                canvasId: "verifyCanvas", //Canvas-ID
                width: "150", //Standard-Leinwandbreite height: "47", //Standard-Leinwandhöhe type: "blend", //Standardtyp des Grafiküberprüfungscodes blend: gemischter Typ aus Zahlen und Buchstaben, number: reine Zahlen, letter: reine Buchstaben code: "",
                AnzahlAnzahl: "0,1,2,3,4,5,6,7,8,9".split(","),
                letterArr: this.getAllLetter(),
            }
        }

    }

    componentDidMount() {
        const selbst = dies;
        setzeTimeout(() => {
            self._init();
            selbst aktualisieren();
        }, 100)
        this.props.onRef(this); // Ruft die von der übergeordneten Komponente übergebene Funktion auf und weist sich selbst der übergeordneten Komponente zu}

    _init() {
        let con = document.getElementById(this.state.options.id);
        let canvas = document.createElement("canvas");
        this.state.options.width = con.offsetWidth > 0 ? con.offsetWidth : "150";
        this.state.options.height = con.offsetHeight > 0 ? con.offsetHeight : "47";
        canvas.id = dieser.Zustand.Optionen.CanvasId;
        canvas.width = dieser.Zustand.Optionen.Breite;
        canvas.height = dieser.Zustand.Optionen.Höhe;
        canvas.style.cursor = "Zeiger";
        canvas.innerHTML = „Ihre Browserversion unterstützt Canvas nicht“;
        con.appendChild(Leinwand);
        lass Elternteil = dies;
        canvas.onclick = Funktion () {
            übergeordnetes Element.Aktualisieren();
        }
    }

    aktualisieren() {
        dieser.Status.Optionscode = "";
        let canvas: beliebig = document.getElementById(this.state.options.canvasId);
        lass ctx = null;
        wenn (canvas.getContext) {
            ctx = canvas.getContext('2d');
        } anders {
            zurückkehren;
        }
        ctx.clearRect(0, 0, dieser.Zustand.Optionen.Breite, dieser.Zustand.Optionen.Höhe);
        ctx.textBaseline = "Mitte";

        ctx.fillStyle = diese.randomColor(180, 240);
        ctx.fillStyle = "rgba(0,0,0,0)"; //Hintergrundfarbe ctx.fillRect(0, 0, this.state.options.width, this.state.options.height);

        if (this.state.options.type == "blend") { //Beurteilen Sie den Typ des Bestätigungscodes var txtArr = this.state.options.numArr.concat(this.state.options.letterArr);
        } sonst wenn (dieser.Zustand.Optionen.Typ == "Zahl") {
            var txtArr = dieser.Zustand.Optionen.AnzahlArr;
        } anders {
            var txtArr = dieser.Zustand.Optionen.letterArr;
        }

        für (var i = 1; i <= Größe; i++) {
            var txt = txtArr[this.randomNum(0, txtArr.length)];
            dieser.Zustand.Optionen.Code += txt;
            ctx.font = this.randomNum(this.state.options.height / 2, this.state.options.height) + 'px SimHei'; //Schriftgröße zufällig generieren ctx.fillStyle = this.randomColor(50, 160); //Schriftfarbe zufällig generieren// ctx.fillStyle = "rgb(46, 137, 255)";//Feste Schriftfarbe ctx.shadowOffsetX = this.randomNum(-3, 3);
            ctx.shadowOffsetY = this.randomNum(-3, 3);
            ctx.shadowBlur = this.randomNum(-3, 3);
            ctx.shadowColor = "rgba(0, 0, 0, 0,3)";
            var x = dieser.Zustand.Optionen.Breite / (Größe + 1) * i;
            var y = dieser.Zustand.Optionen.Höhe / 2;
            var deg = diese.randomNum(-30, 30);
            /**Drehwinkel und Koordinatenursprung festlegen**/
            ctx.translate(x, y);
            ctx.rotate(Grad * Math.PI / 180);
            ctx.fillText(txt, 0, 0);
            /**Drehwinkel und Koordinatenursprung wiederherstellen**/
            ctx.rotate(-grad * Math.PI / 180);
            ctx.translate(-x, -y);
        }
        /**Interferenzlinie zeichnen**/
        für (var i = 0; i < 4; i++) {
            ctx.strokeStyle = this.randomColor(40, 180);
            ctx.beginPath();
            ctx.moveTo(diese.randomNum(0, dieser.Zustand.Optionen.Breite), diese.randomNum(0, dieser.Zustand.Optionen.Höhe));
            ctx.lineTo(diese.randomNum(0, dieser.Zustand.Optionen.Breite), diese.randomNum(0, dieser.Zustand.Optionen.Höhe));
            ctx.stroke();
        }
    }

    validieren(Code) {
        var code = code.toLowerCase();
        var v_code = this.state.options.code.toLowerCase();
        wenn (Code == v_Code) {
            gibt true zurück;
        } anders {
            dies.aktualisieren();
            gibt false zurück;
        }
    }
    /**Buchstaben-Array generieren**/
    getAllLetter() {
        var letterStr = "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z";
        return letterStr.split(",");
    }
    /**Eine Zufallszahl generieren**/
    Zufallszahl(min, max) {
        gibt Math.floor(Math.random() * (max - min) + min) zurück;
    }
    /**Erzeuge eine zufällige Farbe**/
    zufälligeFarbe(min, max) {
        var r = diese.randomNum(min, max);
        var g = diese.randomNum(min, max);
        var b = diese.randomNum(min, max);
        gibt "rgb(" + r + "," + g + "," + b + ")" zurück;
    }

    rendern() {
        zurückkehren (
            <div id="Verifycode" style={Verifycode}></div>
        )
    }
}

Hier wird der Stil des Verifycodes von Ihnen selbst geändert, im Allgemeinen ein Code-Schnipsel.

importiere InputVerify aus "../InputVerify"

Auf diese Weise kann der Bestätigungscode automatisch generiert werden. Wie kann man ihn bestätigen? Ich werde ihn einfach hier posten. Das Formular hier verwendet antd, was Sie auf einen Blick verstehen können.

Codeausschnitt.

Standard exportieren ($Child: beliebig = {}) => {
 //Methode zum Absenden des Formulars const onFinish = (Werte: beliebig) => {
        wenn (Werte.vcode) {
            console.log($Child.validate(values.vcode))//Methodenvalidierung der untergeordneten Komponente aufrufen}
    };
    
 const onFinishFailed = (Fehlerinfo: beliebig) => {
        console.log('Fehlgeschlagen:', errorInfo);
    };
 
 zurückkehren (
  <Formular
            {...Layout}
            Name="Grundlegend"
            beimFertigstellen={beimFertigstellen}
            onFinishFailed={onFinishFailed}
        >
         <Form.Item name="vcode" rules={[{ required: true, message: ,Bitte geben Sie den Bestätigungscode ein' }]}>
               <Input size="large" className="security-code" placeholder="Bitte geben Sie den Bestätigungscode ein" />
            </Form.Item>
   {/* Hier ruft die übergeordnete Komponente die Methode der untergeordneten Komponente über onRef auf*/}
   <InputVerify onRef={(ref) => { $Child = ref }}></InputVerify>
  </Form>
 )
}

Die obige Schreibmethode ist tatsächlich die alte Schreibmethode für React. React 16.8 und höher verwenden alle Hooks, daher werde ich sie auch ändern. Der Code lautet wie folgt:

Codeausschnitt.

importiere * als React von „react“;

Konstantengröße = 4;
const Verifizierungscode = {
    Breite: "32%",
    Höhe: "32px",
    marginLeft: "5%",
    Anzeige: „Inline-Block“,
    position:"absolut" als "absolut",
    oben: "0",
    rechts:"0",
}

Standard exportieren ({cRef}) => {
    const [code, setCode] = React.useState(Boolean);
    const [Optionen, Optionen festlegen] = React.useState({
                id: "verifycode", //Container-ID
                canvasId: "verifyCanvas", //Canvas-ID
                width: 150, //Standard-Leinwandbreite height: 47, //Standard-Leinwandhöhe type: "blend", //Standardtyp des Grafiküberprüfungscodes blend: gemischter Typ aus Zahlen und Buchstaben, number: reine Zahlen, letter: reine Buchstaben code: "",
                AnzahlAnzahl: "0,1,2,3,4,5,6,7,8,9".split(","),
                letterArr: getAllLetter(),});

    React.useImperativeHandle(cRef,()=>({
        validieren: (vcode) => {
            var vcode = vcode.toLowerCase();
            var v_code = options.code.toLowerCase();
            wenn (vcode == v_code) {
                setzeCode(true);
            } anders {
                aktualisieren();
                setzeCode(false);
            }
            Rückgabecode;
        }
    }));

    Reagieren.useEffect(()=>{
        _init();
        aktualisieren();
    })

    Funktion _init() {
        let con = document.getElementById(options.id);
        let canvas: beliebig = document.createElement("canvas");
        Optionen.Breite = con.OffsetWidth > 0? con.OffsetWidth: 150;
        Optionen.Höhe = con.OffsetHeight > 0? con.OffsetHeight: 47;
        canvas.id = Optionen.canvasId;
        canvas.width = Optionen.Breite;
        Canvas.Höhe = Optionen.Höhe;
        canvas.style.cursor = "Zeiger";
        canvas.innerHTML = „Ihre Browserversion unterstützt Canvas nicht“;
        con.appendChild(Leinwand);
        canvas.onclick = Funktion () {
            aktualisieren();
        }
    }

    Funktion aktualisieren() {
        Optionen.code = "";
        let canvas: beliebig = document.getElementById(options.canvasId);
        lass ctx = null;
        wenn (canvas.getContext) {
            ctx = canvas.getContext('2d');
        } anders {
            zurückkehren;
        }
        ctx.clearRect(0, 0, Optionen.Breite, Optionen.Höhe);
        ctx.textBaseline = "Mitte";

        ctx.fillStyle = zufälligeFarbe(180, 240);
        ctx.fillStyle = "rgba(0,0,0,0)"; //Hintergrundfarbe ctx.fillRect(0, 0, options.width, options.height);

        if (options.type == "blend") { //Den Typ des Bestätigungscodes beurteilen var txtArr = options.numArr.concat(options.letterArr);
        } sonst wenn (Optionen.Typ == "Zahl") {
            var txtArr = Optionen.numArr;
        } anders {
            var txtArr = Optionen.letterArr;
        }

        für (var i = 1; i <= Größe; i++) {
            var txt = txtArr[randomNum(0, txtArr.Länge)];
            Optionen.code += txt;
            ctx.font = randomNum(options.height / 2, options.height) + 'px SimHei'; //Schriftgröße zufällig generieren ctx.fillStyle = randomColor(50, 160); //Schriftfarbe zufällig generieren// ctx.fillStyle = "rgb(46, 137, 255)";//Feste Schriftfarbe ctx.shadowOffsetX = randomNum(-3, 3);
            ctx.shadowOffsetY = Zufallszahl(-3, 3);
            ctx.shadowBlur = Zufallszahl(-3, 3);
            ctx.shadowColor = "rgba(0, 0, 0, 0,3)";
            var x = Optionen.Breite / (Größe + 1) * i;
            var y = Optionen.Höhe / 2;
            var deg = Zufallszahl(-30, 30);
            /**Drehwinkel und Koordinatenursprung festlegen**/
            ctx.translate(x, y);
            ctx.rotate(Grad * Math.PI / 180);
            ctx.fillText(txt, 0, 0);
            /**Drehwinkel und Koordinatenursprung wiederherstellen**/
            ctx.rotate(-grad * Math.PI / 180);
            ctx.translate(-x, -y);
        }
        /**Interferenzlinie zeichnen**/
        für (var i = 0; i < 4; i++) {
            ctx.strokeStyle = zufälligeFarbe(40, 180);
            ctx.beginPath();
            ctx.moveTo(Zufallszahl(0, Optionen.Breite), Zufallszahl(0, Optionen.Höhe));
            ctx.lineTo(Zufallszahl(0, Optionen.Breite), Zufallszahl(0, Optionen.Höhe));
            ctx.stroke();
        }
    }

        /**Buchstaben-Array generieren**/
    Funktion getAllLetter() {
        var letterStr = "a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z";
        return letterStr.split(",");
    }
    /**Eine Zufallszahl generieren**/
    Funktion Zufallszahl(min: beliebig, max: beliebig) {
        gibt Math.floor(Math.random() * (max - min) + min) zurück;
    }
    /**Erzeuge eine zufällige Farbe**/
    Funktion Zufallsfarbe(min, max) {
        var r = Zufallszahl(min, max);
        var g = Zufallszahl(min, max);
        var b = Zufallszahl(min, max);
        gibt "rgb(" + r + "," + g + "," + b + ")" zurück;
    }

    zurückkehren (
        <div id="Verifycode" style={Verifycode}></div>
    )
}

Der Aufruf ist ebenfalls einfach. Die übergeordnete Komponente deklariert ein React.useRef und übergibt es an die untergeordnete Komponente.

const childRef = React.useRef<any>();
//Hier wird der Code durch das onFinish-Ereignis des Formulars von antD erhalten. //Rufen Sie die Methode der untergeordneten Komponente childRef.current.validate(code) auf.

<InputVerify cRef={childRef}></InputVerify>

Die Wirkung ist folgende:

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Beispielcode der gleitenden Bildüberprüfungscodekomponente von React
  • Freigabe des React Native-Verifizierungscode-Countdown-Tools
  • Chat-Blase in React Native und Timer in einen Countdown verpackt, um den Bestätigungscode zu senden
  • Implementierungscode für die Countdown-Steuerung des ReactNative-SMS-Verifizierungscodes
  • Beispielcode für eine Schaltfläche mit Countdown für Bestätigungscodes in React-Native

<<:  So richten Sie virtuelle Verzeichnisse ein und konfigurieren virtuelle Pfade in Tomcat 7.0

>>:  Mybatis-Implementierungsmethode für Fuzzy-Abfragen

Artikel empfehlen

Die detaillierteste Methode zur Installation von Docker auf CentOS 8

Installieren Sie Docker unter CentOS 8 Offizielle...

Detaillierte Erklärung der HTML-Dokumenttypen

Meines ist: <!DOCTYPE html> Blog-Garten: &l...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.11

Die Installations- und Konfigurationsmethoden von...

Tiefgreifendes Verständnis mathematischer Ausdrücke in CSS calc()

Der mathematische Ausdruck calc() ist eine Funkti...

Wettersymbol-Animationseffekt implementiert durch CSS3

Ergebnisse erzielen Implementierungscode html <...

So verwenden Sie die JSZip-Komprimierung in CocosCreator

CocosCreator-Version: 2.4.2 Praktische Projektanw...

Einführung in Jenkins und wie man Jenkins mit Docker bereitstellt

1. Verwandte Konzepte 1.1 Jenkins-Konzepte: Jenki...

Beispielcode zur Implementierung von Neon-Button-Animationseffekten mit CSS3.0

Heute zeige ich Ihnen einen Neon-Button-Animation...

Die „3I“-Standards für erfolgreiche Printwerbung

Für viele inländische Werbetreibende ist die Erste...

Mysql-Abfrageanweisung mit mehreren Bedingungen und dem Schlüsselwort „And“

MySQL-Abfrage mit mehreren Bedingungen und dem Sc...

Bringen Sie Ihnen bei, wie Sie Hive3.1.2 auf Tencent Cloud erstellen

Umgebungsvorbereitung Stellen Sie vor dem Starten...