How could we handle expensive or frequent subscriptions that need to access some changing prop/state with hooks?
Abierto
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 11.8k
- Forks
- 7.9k
- Merge medio
- 1 d 11 h
- PR fusionados (30 d)
- 11
Descripción
It sort of looks hard without breaking the rule
const Component = ({ outer }) => {
const [mutable, setMutable] = useState(0);
const [cond, setCond] = useState(false);
useEffect(() => {
const handle = doExpensiveSubscription((value) => {
if (cond) {
// cond and outer are stale values
setMutable(calculate(outer, value));
}
});
return handle.unsubscribe;
// the ESLint exhaustive-deps rule would warn about unmet dependency: outer, cond
}, []);
return <div onClick={() => setCond(!cond)}>{mutable}</div>;
};
My temporary solution to the problem looks like
const Component = ({ outer }) => {
const [mutable, setMutable] = useState(0);
const [cond, setCond] = useState(false);
const paramRef = useRef({});
paramRef.current = { outer, cond };
useEffect(() => {
const handle = doExpensiveSubscription((value) => {
const { outer, cond } = paramRef.current;
if (cond) {
// cond and outer hold their respective current values now
setMutable(calculate(outer, value));
}
});
return handle.unsubscribe;
// the ESLint exhaustive-deps rule would warn about unmet dependency: outer, cond
}, []);
return <div onClick={() => setCond(!cond)}>{mutable}</div>;
};
There does not seem to be a specific documentation about that.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con los ejemplos de hooks del issue y revisa la documentación existente sobre useEffect, useRef y exhaustive-deps. Determina cómo debería explicar la documentación las suscripciones que necesitan las props o el estado actuales sin recrear suscripciones costosas; se considerará terminado cuando la guía aborde el problema de los valores obsoletos y la advertencia sobre las dependencias.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, react
- Área
- documentation
- Tipo de issue
- Documentación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100