Justo antes de entrar en detalles sobre cómo puede acceder al estado de un componente secundario, asegúrese de leer la respuesta de Markus-ipse con respecto a una mejor solución para manejar este escenario en particular.
Si realmente desea acceder al estado de los elementos ref
secundarios de un componente, puede asignar una propiedad llamada a cada elemento secundario. Ahora hay dos formas de implementar referencias: Uso React.createRef()
y referencias de devolución de llamada.
Utilizando React.createRef()
Esta es actualmente la forma recomendada de utilizar referencias a partir de React 16.3 (consulte los documentos para obtener más información). Si está utilizando una versión anterior, consulte a continuación las referencias de devolución de llamada.
Deberá crear una nueva referencia en el constructor de su componente principal y luego asignarla a un hijo a través del ref
atributo.
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Para acceder a este tipo de referencia, deberá usar:
const currentFieldEditor1 = this.FieldEditor1.current;
Esto devolverá una instancia del componente montado para que pueda usarlo currentFieldEditor1.state
para acceder al estado.
Solo una nota rápida para decir que si usa estas referencias en un nodo DOM en lugar de un componente (por ejemplo <div ref={this.divRef} />
) this.divRef.current
, devolverá el elemento DOM subyacente en lugar de una instancia de componente.
Referencia de devolución de llamada
Esta propiedad toma una función de devolución de llamada a la que se le pasa una referencia al componente adjunto. Esta devolución de llamada se ejecuta inmediatamente después de que el componente esté montado o desmontado.
Por ejemplo:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
En estos ejemplos, la referencia se almacena en el componente principal. Para llamar a este componente en su código, puede usar:
this.fieldEditor1
y luego usar this.fieldEditor1.state
para obtener el estado.
Una cosa a tener en cuenta, asegúrese de que su componente hijo se haya procesado antes de intentar acceder a él ^ _ ^
Como se indicó anteriormente, si usa estas referencias en un nodo DOM en lugar de un componente (por ejemplo <div ref={(divRef) => {this.myDiv = divRef;}} />
) this.divRef
, devolverá el elemento DOM subyacente en lugar de una instancia de componente.
Más información
Si desea leer más sobre la propiedad de referencia de React, consulte esta página de Facebook.
Asegúrese de leer la sección "No usar en exceso las referencias " que dice que no debe usar al niño state
para "hacer que las cosas sucedan".
Espero que esto ayude ^ _ ^
Editar: React.createRef()
Método agregado para crear referencias. Se eliminó el código ES5.