En mi aplicación puede establecer una restricción de edad en un enlace. Si hay una restricción de edad en el enlace, tendrá un elemento llamado ageRestriction en el estado del enlace que contiene un int que es la edad. Si no tiene restricción de edad no la habrá.
Cuando tengo la oportunidad de que el enlace tenga una restricción de edad, se ejecuta el siguiente código:
useEffect(async () => { if(ageRestriction === false) { const newLink = link; delete newLink.ageRestriction setLink(newLink) } else if(ageRestriction === true) setLink({...link, ageRestriction: storedAge}) }, [ageRestriction])que luego debería activar el siguiente código:
useEffect(() => { const validate = validateLink(link) if(validate) { setError(validate) } setError({}) dispatch({type: 'update', link: link, index: index}) }, [link])Si agrego una restricción de edad en la primera parte del código, se desencadena el uso de UseEffect en la segunda parte del código. Si elimino el elemento ageRestriction del objeto y configuro el estado, useEffect en la segunda parte del código no se activa. Que puedo hacer para solucionar esto gracias! por adelantado.
La dependencia de su segundo useEffect debe ser link.ageRestriction porque la comparación entre objetos se realiza por referencia, por lo que eliminar la propiedad del objeto de enlace no activa el efecto:
useEffect(() => { const validate = validateLink(link) if(validate) { setError(validate) } setError({}) dispatch({type: 'update', link: link, index: index}) }, [link.ageRestriction]) Alternativamente, puede crear un nuevo objeto al eliminar la propiedad en el primer useEffect de la siguiente manera:
useEffect(async () => { if(ageRestriction === false) { const newLink = link; delete newLink.ageRestriction setLink({ ...newLink }) } else if(ageRestriction === true) setLink({...link, ageRestriction: storedAge}) }, [ageRestriction])