reactjs / reactjs/react.dev

How could we handle expensive or frequent subscriptions that need to access some changing prop/state with hooks?

Abierto
#2,862 1 comentario 0 reacciones 0 asignados Ver en GitHub

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

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. 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

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.