Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

336
Views
Reaccionar: ¿Por qué los accesorios no están congelados?

React sugiere no mutar accesorios. Estaba operando bajo la impresión de que cuando se pasan accesorios, serían inmutables o congelados.

El siguiente código no arroja ningún error y muta el accesorio. ¿Es esto un error?

 try{ var a = this.props.a; a.push('one') a.push('two') a.push('three') console.log(a) }catch(err){ console.log(err) }
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

No estoy seguro del razonamiento exacto detrás de esto o si eso está documentado en alguna parte, pero podría adivinar:

Congelar cualquier asignación a una variable no es fácil o incluso necesariamente posible fuera del uso de funciones de navegador nuevas o incluso aún no implementadas. Además, la congelación profunda de todos sus accesorios en su aplicación podría tener implicaciones en el rendimiento y, sin duda, debería eliminarse para las compilaciones de producción.

¿Se puede congelar la asignación de una variable primitiva? No me parece. Creo que babel lo hace con const comprobando estáticamente el código en tiempo de compilación.

¿Y puede congelar objetos sin Object.freeze o el proxy de ES7? Nuevamente, no lo creo, el archivo Léame de es5-shim dice:

que posiblemente no pueda obtener en motores heredados

¿Qué pasa si alguien muta algo? Estos accesorios se copian superficialmente, lo que significa que no afectará al accesorio principal a menos que modifique un objeto anidado. Sin embargo, incluso si lo hiciera, no afectaría a la aplicación, ya que se eliminaría en el siguiente renderizado (al igual que sus modificaciones).

Si tengo algo mal por favor házmelo saber! Este es solo mi razonamiento.

over 4 years ago · Santiago Trujillo Report

0

Parece que este es el mismo comportamiento que tiene const , no puede reasignar el valor, pero aún puede presionar la matriz o agregar claves a un objeto porque no están protegidos. De todos modos, a pesar de la posibilidad de hacer esas mutaciones, no deberías hacer esto.

this.props.a = [1,2,3]; no funcionará

this.props.a.push(123); trabajará.

this.props.a = {name: 'John Doe'} no funcionará

this.props.a.name = 'John Doe' funcionará

Si intenta reasignar un accesorio en su componente, se producirá un error de tipo.

TypeError no capturado: no se puede asignar a la propiedad de solo lectura un...

over 4 years ago · Santiago Trujillo Report

0

No arrojará ningún error a menos que congele el objeto (accesorios) explícitamente.

Los accesorios se reciben de los padres y son inmutables en lo que respecta al Componente que los recibe.

es decir, reaccionar de forma predeterminada, los props son inmutables en el sentido de que su componente se preocupa por mantenerlos como datos recibidos de los padres y usarlos tal como están. Donde podemos usar el state para mantener el local (datos de nivel de componente) que se puede cambiar en cualquier momento y mantener el contrato de accesorios con el padre.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!