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

356
Visualizações
¿Cómo obtener la instancia del componente de reacción correspondiente al elemento event.target en un controlador de clic?

Esta es mi clase de componente de reacción.

 class TestInstance extends React.Component { onClick(e) { //When the user clicks in the button, //I need to read the custom-id property here } render() { return ( <Wrapper onClickCapture={this.onClick}> <div> <button custom-data={{test: 'test data'}}>Click Me</button> </div> </Wrapper> ); } }

Aquí estoy escuchando todos los eventos de clic que ocurren bajo el nodo contenedor. Cada vez que ocurre un clic, necesito averiguar la instancia del componente de reacción asociada con e.target y el valor de esa instancia para su prop custom-data . Habrá varios niños de este tipo con diferentes valores para prop custom-data . Cada vez que se hace clic en un elemento de este tipo, quiero extraer el valor de ese elemento para su prop custom-data hacer algunas cosas. ¿Cuál es la mejor manera de hacer esto en reactjs? Una forma sería navegar por todo el árbol de niños y comparar la identidad de la instancia de e.target con los elementos DOM para cada uno de los niños. También encontré que e._targetInst._currentElement.props me da el valor de los accesorios. Pero no sé qué tan confiables son estas variables no documentadas. ¿Hay alguna solución documentada para esto? Básicamente estoy buscando algo que me dé el efecto opuesto de ReactDOM.findDOMNode. Ya tengo un nodo DOM y necesito el React Element asociado con eso.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Como mencioné en los comentarios anteriores, esto es mucho más fácil si llama al prop data-custom-id en lugar de custom-id . De esa forma, se representará como un atributo DOM y podrá obtener su valor llamando a e.target.getAttribute('data-custom-id') . Puede verlo funcionando en el siguiente fragmento. (Dado que no nos mostró el código para el componente Wrapper, adiviné una implementación).

 class Wrapper extends React.Component { componentDidMount() { this.refs.wrap.addEventListener('click', this.props.onClickCapture, true); } componentDidUnmount() { this.refs.wrap.removeEventListener('click', this.props.onClickCapture); } render() { return <div ref="wrap">{this.props.children}</div>; } } class TestInstance extends React.Component { onClick(e) { console.log('Clicked %s', e.target.getAttribute('data-custom-id')); } render() { return ( <Wrapper onClickCapture={this.onClick}> <div> <button data-custom-id="btn-1">Button 1</button> <button data-custom-id="btn-2">Button 2</button> </div> </Wrapper> ); } } ReactDOM.render(<TestInstance/>, document.getElementById('root'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="root"/>

over 4 years ago · Santiago Trujillo Relatório

0

Guarde una referencia y verifique que e.target sea lo mismo que la referencia

 class TestInstance extends React.Component { element = null; onClick(e) { //When the user clicks in the button, //I need to read the custom-id property here if (e.target === ReactDOM.findDOMNode(element)) { // get custom id here } } render() { return ( <Wrapper onClickCapture={this.onClick}> <div> <button ref={e => this.element = e} custom-id="btn">Click Me</button> </div> </Wrapper> ); } }
over 4 years ago · Santiago Trujillo Relatório

0

 class Wrapper extends React.Component { render() { return ( <div> <button onClick = {()=>this.props.onCapture({'id':'1','name':'btn-1'})}>Button 1</button> <button onClick = {()=>this.props.onCapture({'id':'2','name':'btn-2'})}>Button 2</button> </div> ) } } class TestInstance extends React.Component { onClick(expr) { console.log(expr); //console.log('Clicked %s', e); } render() { return ( <Wrapper onCapture={this.onClick}/> ); } } ReactDOM.render(<TestInstance/>, document.getElementById('root'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="root" />

over 4 years ago · Santiago Trujillo 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