1
resposta

ncaught TypeError: Cannot assign to read only property 'completo' of object '#<Object>'

import React from 'react'; import { useSetRecoilState } from 'recoil'; import { IEvento } from '../../../interfaces/IEvento'; import { listaDeEventosState } from '../../../state/atom';

const EventoCheckbox: React.FC<{evento : IEvento}> = ({ evento }) => {

const setListaDeEventos = useSetRecoilState<IEvento[]>(listaDeEventosState)

const alterarStatus = () => { console.log(evento.completo) if(evento.completo){ evento.completo = false } else{ evento.completo = true }

setListaDeEventos(listaAntiga => {

  const i  = listaAntiga.findIndex(e => e.id ===  evento.id )
  return [...listaAntiga.slice(0,i) , evento , ...listaAntiga.slice(i+1)]
})

} const estilos = [ 'far', 'fa-2x', evento.completo ? 'fa-check-square' : 'fa-square' ]

return (<i className={estilos.join(' ')} onClick={alterarStatus}>) }

export default EventoCheckbox

1 resposta

Salve, Gabriel.

As props que recebemos são imutáveis, e não deveríamos alterá-las.

Você precisa fazer um pequeno ajuste na sua função:

  const alterarStatus = () => {
    const eventoAlterado = {
      ...evento
    }
    eventoAlterado.completo = !eventoAlterado.completo

    setListaDeEventos(listaAntiga => {
      const indice = listaAntiga.findIndex(evt => evt.id === evento.id)
      return [...listaAntiga.slice(0, indice), eventoAlterado, ...listaAntiga.slice(indice + 1)]
    })
  }