J'ai suivi un tutoriel sur la mise à jour d'une valeur, cela increments la valeur lorsque l'utilisateur clique sur un bouton.
Mais, j'ai la valeur de l'objet JSON à mettre à jour. La valeur doit être mise à jour lorsque l'utilisateur clique sur un bouton et vice versa . Après avoir essayé d'implémenter en suivant l'exemple, cela n'a pas changé. Voici mon code:
1. onClick:
{
"id": "fa1ca3c1-cc1e-4ed9-86b8-f60d8312d499",
"author": "Neal Topham",
"avatar": "http://lorempixel.com/100/100/people/1/",
"date": "2017-02-08T00:30:05.552Z",
"message": "Mungkin ada fenomena paranormal yang tidak bisa dijelaskan. Lebih baik nyala mati sendiri daripada tidak nyala sama sekali",
"point": 3,
}
2. useState:
const [count, setCount] = useState(0);
3. comments.json:
<div>
Point: {item.point} 
<button onClick={() => setCount(item.point + 1)} class="btn"><i class="fa fa-arrow-up"></i></button>
<button onClick={() => setCount(item.point - 1)} class="btn"><i class="fa fa-arrow-down"></i></button>
</div>
4. Lien du didacticiel:
4 Réponses :
Utilisez count au lieu de item.point .
<div>
Point: {count} 
<button onClick={() => setCount(item.point + 1)} class="btn"><i class="fa fa-arrow-up"></i></button>
<button onClick={() => setCount(item.point - 1)} class="btn"><i class="fa fa-arrow-down"></i></button>
</div>
const [count, setCount] = useState(item.point);
Le problème est que vos écouteurs onClick mettent à jour la variable count pendant le rendu de item.point .
À ce stade, React restitue simplement la propriété point de l'objet item , qui n'est liée à aucune modification de la variable d'état de count .
En fonction de la logique de votre application, vous souhaiterez peut-être extraire l' item.point directement dans la variable count comme ceci:
const [count, setCount] = useState(item.point);
et rendre {count} au lieu de {item.point}
Cependant, cette approche ne fonctionnera que dans une direction, ce qui signifie que lorsque vous cliquez sur le bouton, la valeur rendue change, mais elle ne met pas à jour la propriété de point réelle de l'objet d' item
Vous aurez probablement besoin de votre objet pour vivre dans votre état dans votre cas.
useState
<div>
Point: {message.point} 
<button onClick={() => addCount(1)} class="btn"><i class="fa fa-arrow-up"></i></button>
<button onClick={() => addCount(-1)} class="btn"><i class="fa fa-arrow-down"></i></button>
</div>
Vous ne pouvez pas muter une partie de l'état, vous en ferez donc une copie modifiée.
const addCount = (n) => {
setMessage({
...message,
point: message.point + n
});
};
const [message, setMessage] = useState({
"id": "fa1ca3c1-cc1e-4ed9-86b8-f60d8312d499",
"author": "Neal Topham",
"avatar": "http://lorempixel.com/100/100/people/1/",
"date": "2017-02-08T00:30:05.552Z",
"message": "Mungkin ada fenomena paranormal ...",
"point": 3,
});
L'objet JSON est dans le fichier comments.json
1. useState:
<button
onClick={() => {
// first, clone it
const newItems = [...items];
newItems[idx] = {
...item,
point: item.point + 1
};
setItems(newItems);
}}
className="btn-upvote"
>
<i className="fa fa-arrow-up"></i>
</button>
<button
onClick={() => {
// first, clone it
const newItems = [...items];
newItems[idx] = {
...item,
point: item.point - 1
};
setItems(newItems);
}}
className="btn-downvote"
>
<i className="fa fa-arrow-down"></i>
</button>
2. Bouton modifié:
const [items, setItems] = useState([]);
Un "objet JSON" n'existe pas