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}></i>)
}

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
    }
    if(evento.completo){
      eventoAlterado.completo = false
    }
    else{
      eventoAlterado.completo = true
    }

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