Tengo un componente con algunos estados diferentes: todos los estados son vistas separadas de un objeto y no son mutuamente excluyentes.
Imagine una clase con una docena de escolares: todos tienen características que describo con estados: color de ojos, color de cabello, género, etc.
Entonces, puedo seleccionar 'todos los eruditos con cabello castaño Y hombres' o 'todos con ojos azules y mujeres' y así sucesivamente.
Así que tengo todos estos estados que actúan como filtros.
Pero hay otro estado, digamos state1, que representa a un erudito específico, digamos 'John Park' o 'Sarah Fawcett'.
Cuando este filtro está activado, solo hay una respuesta posible, y todos los demás filtros desaparecen.
const [specificPerson,setSpecificPerson]=useState(false); const [hairColor,setHairColor]=useState(false); const [eyeColor,setEyeColor]=useState(false); const [gender,setGender] = useState(false); const allScholars = [array of all scholars]; const [selectedScholars, setSelectedSCholars] = useState([]);entonces tengo 2 useEffect:
useEffect(() => { setHairColor(false); setEyeColor(false); setGender(false); }, [specificPerson] ) useEffect(() => { set list = []; if (hairColor || eyeColor || gender) { list.add(allScholars.filter (byHairColor) list.add(allScholars.filter (byEyeColor) list.add(allScholars.filter (byGender) } else { list.add(specificPerson); setSelectedScholars(list.unique); }, [allScholars, selectedScholars, specificPerson, hairColor, eyeColor, gender, setSelectedScholars] ) return <>selectedScholars.map(each .....) </>ahora, el estado actual de mi aplicación es el siguiente:
hairColor = brown eyeColor = false gender = false specificPerson = false Todos los eruditos con cabello castaño se recopilan en los eruditos selectedScholars y luego se rendered .
Luego, ocurre el evento setSpecificPerson("John Doe") . "John Doe" debe ser interpretado y todos los demás eruditos deben desaparecer debido al primer efecto de uso.
Lo que realmente sucede es solo otra película:
specificPersonspecificPerson , pero hairColor aún no ha cambiado y sigue siendo brown , debido a la cola.specificPerson .Espero que este ejemplo sea más realista que el anterior.