Comment pousser un élément dans le React hook du tableau useState ? Est-ce une ancienne méthode dans react state ? Ou quelque chose de nouveau ?
Par exemple exemple de setState push ?
Comment pousser un élément dans le React hook du tableau useState ? Est-ce une ancienne méthode dans react state ? Ou quelque chose de nouveau ?
Par exemple exemple de setState push ?
Créer un état de tableau avec useState() Tout d'abord, voyons comment utiliser le hook useState() pour créer une variable d'état de type tableau.
import React from "react";
const { useState } = React;
const [myArray, setMyArray] = useState([]);
Cependant, avec React, nous devons utiliser la méthode renvoyée par useState pour mettre à jour le tableau.
setMyArray(oldArray => [...oldArray, newElement]);
L'argument de type "(oldArray : { array1 : string[] ; }) => any[]" n'est pas affectable au paramètre de type "SetStateAction<{ array1 : string[] ; }>". Le type '(oldArray : { array1 : string[] ; }) => any[]' n'est pas assignable au type '(prevState : { array1 : string[] ; }) => { array1 : string[] ; }'. La propriété 'array1' est manquante dans le type 'any[]' mais requise dans le type '{ array1 : string[] ; }'.ts(2345)
De la même manière que vous le faites avec l'état "normal" dans les composants de classe React.
exemple :
function App() {
const [state, setState] = useState([]);
return (
<div>
<p>You clicked {state.join(" and ")}</p>
//destructuring
<button onClick={() => setState([...state, "again"])}>Click me</button>
//old way
<button onClick={() => setState(state.concat("again"))}>Click me</button>
</div>
);
}
Le clonage profond que vous mentionnez, cela signifie-t-il recevoir comme objA. UseState et concaténer l'objA avec l'objB ? Comme dans ce lien ? gist.githubusercontent.com/kahsing/
J'ai essayé les méthodes ci-dessus pour pousser un objet dans un tableau d'objets dans useState mais j'ai eu l'erreur suivante en utilisant TypeScript :
Le type 'TxBacklog[] | undefined' doit avoir une méthode 'Symbol.iterator' qui renvoie un itérateur.ts(2488)
La configuration du tsconfig.json était apparemment correcte :
{
"compilerOptions": {
"target": "es6",
"lib": [
"dom",
"dom.iterable",
"esnext",
"es6",
],
Cette solution de contournement a résolu le problème (mon exemple de code) :
Interface :
interface TxBacklog {
status: string,
txHash: string,
}
Variable d'état :
const [txBacklog, setTxBacklog] = React.useState<TxBacklog[]>();
Pousse le nouvel objet dans le tableau :
// Define new object to be added
const newTx = {
txHash: '0x368eb7269eb88ba86..',
status: 'pending'
};
// Push new object into array
(txBacklog)
? setTxBacklog(prevState => [ ...prevState!, newTx ])
: setTxBacklog([newTx]);
Si vous voulez pousser après un index spécifique, vous pouvez faire comme ci-dessous :
const handleAddAfterIndex = index => {
setTheArray(oldItems => {
const copyItems = [...oldItems];
const finalItems = [];
for (let i = 0; i < copyItems.length; i += 1) {
if (i === index) {
finalItems.push(copyItems[i]);
finalItems.push(newItem);
} else {
finalItems.push(copyItems[i]);
}
}
return finalItems;
});
};
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.