Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

201
Visualizações
How can I have multiple states in the javascript array only when it's pressed?

I made a to-do app that has Incompleted, Completed, and Deleted sections. Each Incompletedand Completed section has onClickDelete buttons, and when it's pressed, the task is supposed to be sent to the Deleted section. However, it is sent to the Deleted section but it always contains an empty task. I know that my code is successfully pushing multiple states in the array but not sure how to fix it.

I tried const newDeletedTodos = [...deleteTodos, incompeleteTodos[index],completeTodos[index]]

or const newDeletedTodos = [...deleteTodos, incompeleteTodos[index]||completeTodos[index]] but didn't work.

I appreciate any advice!


  const onClickDelete = (index) => {
    //works fine
    const newTodos = [...incompeleteTodos]
    newTodos.splice(index, 1) 

    //works fine
    const newCompletedTodos = [...completeTodos]
    newCompletedTodos.splice(index, 1)

    //Works strange.
    const newDeletedTodos = [...deleteTodos]
    newDeletedTodos.push(incompeleteTodos[index])
    newDeletedTodos.push(completeTodos[index] )

    setIncompleteTodos(newTodos)
    setCompleteTodos(newCompletedTodos)
    setDeleteTodos(newDeletedTodos)
  }
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

as per @titus suggestion, you state can be like

const [todos, SetTodos] = useState<{ id: string; 
                                    text: string; 
                                    state: "uncomplete"| "complete"| "deleted" }>([])


const onClickDelete = (id) => {
 SetTodos(prev => prev.map(x => x.id === id ? {...x, state: 'deleted'} : x ))
}
about 4 years ago · Juan Pablo Isaza Relatório

0

For React state updates that depend on the previous value, the callback argument must be used. This is due to the asynchronous nature of state updates (docs)

Eg. to remove an element.

var index = 5;
setTodos((todos)=>(
   todos.filter((t,i)=> (
       index != i
   )
)

Similiary concat can be used to append to the array.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda