Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

195
Visualizações
¿React aplica una comparación superficial/profunda en la matriz de dependencia de los ganchos?
const memoizedValue = useMemo(() => { // factory function }, [obj]);

Imagine obj tiene varios accesorios anidados.

En este ejemplo con gancho useMemo:

  • ¿React volverá a calcular el valor dado por la función de fábrica si cambia la referencia a obj ?

o

  • Aplica una comparación profunda/superficial en obj y luego vuelve a calcular el valor si alguna propiedad ha cambiado , independientemente de su referencia.
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

¿React volverá a calcular el valor dado por la función de fábrica si cambia la referencia a obj?

Por lo que sé y entiendo, React utiliza controles de igualdad de referencia superficiales.

Considere el siguiente código:

 function App() { const [c, setC] = React.useState(0); const [obj, setObj] = React.useState({ prop: 10 }); const forceRender = () => setC((c) => c + 1); const memoizedValue1 = React.useMemo(() => { console.log("`obj` dependency updated, recomputing value."); return obj.prop; }, [obj]); const memoizedValue2 = React.useMemo(() => { console.log("`obj.prop` dependency updated, recomputing value."); return obj.prop; }, [obj.prop]); const immutableHandler = () => { setObj(() => { console.log("Immutable update returns new object."); return { prop: 42 }; }); forceRender(); }; const mutableHandler = () => { setObj((obj) => { console.log("Mutable update returns same object with updated property."); obj.prop = 13; // DON'T DO THIS IN REAL CODE, IT'S A MUTATION!! return obj; }); forceRender(); }; return ( <div className="App"> <div>memoizedValue1: {memoizedValue1} - memoizedValue2: {memoizedValue2}</div> <button type="button" onClick={immutableHandler}> Immutable Update </button> <button type="button" onClick={mutableHandler}> Mutable Update </button> <button type="button" onClick={() => setObj({ prop: 10 })}> Reset </button> </div> ); } const rootElement = document.getElementById("root"); ReactDOM.render( <React.StrictMode> <App /> </React.StrictMode>, rootElement );
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.2/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.2/umd/react-dom.production.min.js"></script> <div id="root" />

memoizedValue1 utiliza el valor del objeto obj raíz como dependencia, mientras que memoizedValue2 utiliza el valor del objeto obj.prop anidado como dependencia. Un botón actualiza y devuelve una referencia de objeto obj completamente nueva, mientras que el otro solo actualiza la referencia de valor obj.prop . Cuando se reemplaza todo el objeto y es una nueva referencia, observe que se invocan ambas devoluciones de llamada de gancho useMemo , pero cuando solo se actualiza el valor prop anidado, solo se invoca la segunda devolución de llamada de gancho useMemo .

Conclusión

React no analiza más a fondo las propiedades anidadas al comparar las dependencias de ganchos de React.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda