Salut, je suis en train de suivre un cours pour apprendre React Hooks et je suis coincé sur une tâche. Ma tâche est de créer un bouton qui onClick affiche une citation aléatoire de ce tableau.
const App = (props) => { const [selected, setSelected] = useState(0) return ( <div> {props.anecdotes[selected]} </div> ) } const anecdotes = [ 'If it hurts, do it more often', 'Adding manpower to a late software project makes it later!', 'The first 90 percent of the code accounts for the first 90 percent of the development time...The remaining 10 percent of the code accounts for the other 90 percent of the development time.', 'Any fool can write code that a computer can understand. Good programmers write code that humans can understand.', 'Premature optimization is the root of all evil.', 'Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.' ] ReactDOM.render( <App anecdotes={anecdotes} />, document.getElementById('root') )
J'ai essayé de résoudre ce problème moi-même mais je rencontre des erreurs. Vous vous demandez si quelqu'un a une explication facile à cela? Merci
C'est l'erreur que je continue de recevoir.
TypeError: Impossible de lire la propriété '0' de undefined App src / App.js: 14 11 | 12 | revenir ( 13 |
14 | Obtenez aléatoire | ^ 15 | {anecdotes [sélectionnées]} 16 | 17 | )
4 Réponses :
Ainsi, votre composant d'application reçoit les citations, affiche déjà le devis actuel et, en fonction de la sélection, vous souhaitez avoir un nouveau devis.
La seule chose que vous devez faire est d'ajouter un bouton qui modifie le valeur sélectionnée via setSelected
comme ceci; https://codesandbox.io/s/hungry-dream-4b3eg p >
Le hook useState vous fournit 2 arguments, le premier est de lire
votre état, le second est de écrire
votre état.
Je ne vais pas tout gâcher puisque vous suivez un cours :) Alors faites le nombre aléatoire, peut-être avec une méthode supplémentaire, et vous aurez votre comportement attendu.
const App = props => { const [selected, setSelected] = useState(0); return ( <div> <button onClick={() => setSelected(4)}>change quote</button> // <=== this addition {props.anecdotes[selected]} </div> ); };
Merci d'avoir partagé. Cependant, j'obtiens cette erreur TypeError: Impossible de lire la propriété '0' de undefined
Je suis stupide, j'ai utilisé le bac à sable pour autre chose.
J'ai mis à jour à nouveau, pouvez-vous jeter un oeil. codesandbox.io/s/hungry-dream-4b3eg
Tout ce dont vous avez besoin est de générer un nombre aléatoire entre 0 et la longueur -1 du tableau d'anectodes.
const App = ({anecdotes}) => { const [selected, setSelected] = useState(0) const handleClick = () => { const randomNumber = Math.floor(Math.random() * anecdotes.length); setSelected(randomNumber); } return ( <div> <button onClick={handleClick} >Get Random</button> {anecdotes[selected]} </div> ) }
Solution de hooks pour choisir une valeur aléatoire dans le tableau
import React, { useState } from 'react'; import ReactDOM from 'react-dom'; function Example(props) { const [count, setCount] = useState(0); const { anecdotes } = props; return ( <div> <p>You clicked and random value from array: <h4>{count}</h4></p> <button onClick={() => setCount(anecdotes[Math.floor(Math.random()*anecdotes.length)])}> Click me </button> </div> ); } ReactDOM.render( <Example anecdotes={[1,4,3,2,8,5]}/>, document.getElementById('root') );
Composant aléatoire:
import React from "react"; import ReactDOM from "react-dom"; import "./styles.css"; import Random from "./showRandom"; function App() { return ( <div className="App"> <Random /></div> ); } const rootElement = document.getElementById("root"); ReactDOM.render(<App />, rootElement);
Composant d'application:
import React, { useState } from "react"; import "./styles.css"; const anecdotes = [ 'If it hurts, do it more often', 'Adding manpower to a late software project makes it later!', 'The first 90 percent of the code accounts for the first 90 percent of the development time...The remaining 10 percent of the code accounts for the other 90 percent of the development time.', 'Any fool can write code that a computer can understand. Good programmers write code that humans can understand.', 'Premature optimization is the root of all evil.', 'Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.' ] export default function showRandom() { const [selected, setSelected]=useState(0); return ( <div className="App"> <h1> {anecdotes[selected]}</h1> <button onClick={()=>setSelected(Math.floor(Math.random() * `anecdotes.length))}>Show Random </button>` </div> ); }
Veuillez vérifier, j'ai publié la solution selon vos besoins.
Où avez-vous posté?
jetez un œil à stackoverflow.com/a/58215414/6544460 et votez s'il vous plaît.
votre générateur aléatoire ne génère jamais 0, donc ce n'est pas correct.
alors rencontrez-vous des difficultés?
@SuleymanSah merci pour votre coopération, j'ai édité ma solution. Math.floor sera utilisé à la place de Math.ceil
Vous devez également anecdotes.length au lieu de 5 codé en dur qui devrait être 6.
Montrez votre tentative de solution ainsi que les erreurs et nous pourrons vous indiquer quels pourraient être les problèmes
vous devez mettre à jour "sélectionné" à chaque clic de bouton à un nombre aléatoire (0 à la taille des anecdotes - 1)
Premièrement, vous ne semblez pas avoir de bouton sur lequel cliquer. Quelles erreurs obtenez-vous?
C'est l'erreur que j'obtiens lors de l'ajout d'un bouton avec onClick (). × TypeError: Impossible de lire la propriété '0' sur undefined
Pouvez-vous le faire sans crochets? Sinon, commencez par là, faites fonctionner cela, alors il devrait être assez clair comment traduire cela en syntaxe de hooks
Il y a déjà de nombreuses réponses, vous pouvez vérifier.