comment passer un objet comme accessoire dans nextjs

gxrobb

Je n'arrive pas à comprendre comment je suis censé passer un objet en tant qu'accessoire lors de l'utilisation de useState dans Next JS.

J'ai un générateur lorem ipsum que j'ai créé dans les fonctions javascript. J'ai un composant appelé Paragraphsqui l'abrite. J'ai besoin de passer dans deux propriétés,

  1. un certain nombre de paragraphes.
  2. une longueur de phrase.

La longueur du paragraphe est définie par une entrée de texte où l'utilisateur tape entre 1 et 10. La longueur de la phrase est définie par des boutons radio.

Le problème que je rencontre est que lorsque vous entrez une valeur, le setState est appelé (intentionnel) et cela fonctionne, le problème est que cela fonctionne constamment. Je veux qu'il soit mis à jour uniquement lorsque je clique sur mon bouton "Aventure" pour générer les données. Je ne sais pas comment définir ces valeurs pour les définir en tant que valeurs de propriété d'objet et transmettre ensuite l'objet.

Ci-dessous mon code pour les champs

import React, { useState } from 'react'


import Paragraph from '../components/ipsum/Paragraph.js'


export default function rpgIpsum() {

    const [paragraphNumber, setParagraphNumber] = useState(5)
    const [sentenceLength, setSentenceLength] = useState(5)
    const [data, setData ] = useState({
        outputProps: {
            paragraphNumber: 5,
            sentenceLength: 5
        }
    })

    return (
        <div>
            {data.outputProps.paragraphNumber}
            <div className="container">
                <div className="row">
                    <div className="col-md-2 d-sm-none d-xs-none d-md-block d-none">
                        {/* <img src="public/images/Bard.jpg" alt="Lorem Ipsum Bard!" className="img-fluid" /> */}
                    </div>
                    <div className="col-md-10">
                        <h2>Looking to add some fun to your filler text?</h2>
                        <h5>Let's Spiffy up your copy with some RPG inspired Lorem Ipsum!</h5>

                        <div className="form-container">
                            <p>First, select how many paragraphs you want.  
                                <input 
                                    type="text" 
                                    name="para" 
                                    value={paragraphNumber} 
                                    className="para-box" 
                                    required 
                                    onInput={
                                        event => setParagraphNumber(parseInt(event.target.value))
                                    }
                                />
                                <small id="para-box-help" className="form-text text-muted">(Max of 10)</small>
                            </p>
                            <p>Next, select the length of the sentences</p>
                            <div className="form-check form-check-inline">
                                <input 
                                    className="form-check-input" 
                                    type="radio" 
                                    name="sentences" 
                                    value="3" 
                                    required 
                                    onInput={
                                        event => setSentenceLength(parseInt(event.target.value))
                                    }
                                /> 
                                <label className="form-check-label" htmlFor="inlineRadio1">Short</label>
                            </div>
                            <div className="form-check form-check-inline">
                                <input 
                                    className="form-check-input" 
                                    type="radio" 
                                    name="sentences" 
                                    value="5" 
                                    required 
                                    onInput={
                                        event => setSentenceLength(parseInt(event.target.value))
                                    }
                                />
                                <label className="form-check-label" htmlFor="inlineRadio2">Medium</label>
                            </div>
                            <div className="form-check form-check-inline">
                                <input 
                                    className="form-check-input" 
                                    type="radio" 
                                    name="sentences" 
                                    value="7" 
                                    required 
                                    onInput={
                                        event => setSentenceLength(parseInt(event.target.value))
                                    }
                                />
                                <label className="form-check-label" htmlFor="inlineRadio3">Long</label>
                            </div>
                            <div className="form-group">
                                <button type="submit" className="btn btn-primary"   
                                    onClick={ event => "what do i do here?" ))}
                                >Adventure!</button>
                            </div>
                        </div>
                    </div>
                </div>
                <div className="row">
                    <div className="col-12">
                        <hr />
                            <Paragraph paragraphNumber={data.outputProps.paragraphNumber} sentenceLength={data.outputProps.sentenceLength}/>
                                                
                    </div>
                </div>
            </div>
        </div>
    )
}

je m'agenouille

Ce que je ferais, c'est refactoriser la fonctionnalité d'entrée dans un composant séparé et utiliser une prop de fonction pour transmettre les données d'entrée à un composant externe qui contient également le Paragraphcomposant, comme ceci :

// rpgIpsum.js
export default function rpgIpsum() {
  const [settings, setSettings] = useState({
    paragraphNumber: 5,
    sentenceLength: 5
  });

  return (
    <>
      <ParagraphInput onSubmit={setSettings} />
      <Paragraph {...settings} />
    </>
  );
}

// ParagraphInput.js
export default function ParagraphInput({ onSubmit }) {
  const [paragraphNumber, setParagraphNumber] = useState(5);
  const [sentenceLength, setSentenceLength] = useState(5);

  return (
    <div>
      {/* ... */}
      <button
        type="submit"
        onClick={() => onSubmit({paragraphNumber, sentenceLength})}
      >Adventure!</button>
    </div>
  );
}

De cette façon, settingsin rpgIpsumn'est mis à jour que lorsque le bouton à l'intérieur ParagraphInputest enfoncé, et non à chaque changement d'entrées.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Comment passer un objet comme accessoire à un composant fonctionnel enfant dans React.js?

Comment passer un objet comme accessoire avec vue routeur?

Passer un objet comme accessoire dans React-router Link

Passer un objet comme accessoire de composant dans React

Passer un objet comme accessoire à jsx

Comment passer un objet comme accessoire à mon composant Web généré par vue

Passer un objet de données entier comme accessoire

passer un objet mobx-react-form comme accessoire

Comment passer un composant comme accessoire à un autre composant dans Vue.js

Comment passer un accessoire à {children} dans React?

Comment passer un accessoire à un objet de style dans vue Js

Comment passer un objet directement dans un accessoire via Vue Router ?

Comment passer un composant de classe comme accessoire fonctionnel dans React?

Comment puis-je passer un composant comme accessoire dans React Native?

Comment passer un mot-clé réservé comme accessoire dans reason-react

Comment passer un gestionnaire d'événements comme accessoire dans React?

Comment passer la valeur "clé" de la liste comme accessoire dans un composant imbriqué?

Comment passer un identifiant unique comme accessoire à un autre composant

Passer un crochet comme accessoire

Comment passer un objet abrégé en tant qu'accessoire dans le composant React?

Comment passer un objet en tant qu'accessoire dans React en utilisant dactylographié?

Comment passer l'envoi dans le composant comme accessoire?

Comment passer la fonction comme accessoire dans React?

Comment passer une chaîne comme accessoire dans React Native

Comment passer une fonction comme accessoire dans React-Native

React - Comment passer des accessoires à un composant passé comme accessoire

Comment passer la valeur d'état comme un accessoire

comment passer svg comme accessoire à un composant pressable

Passer un tableau javascript comme accessoire dans ReactJs

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive