Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

88
Vistas
Cómo tomar la entrada de un componente de reacción y pasar la longitud de la entrada a otro componente de reacción

Tengo un área de texto donde quiero tener un evento onChange. Cuando se ingresa texto, quiero calcular la longitud de la cadena ingresada y luego pasarla a otro componente de reacción para mostrar el conteo de caracteres. Sin embargo, tengo problemas para pasar los datos a mi componente de reacción.

Tengo 3 componentes de reacción en total:

  • SegmentCalculator: esta es mi aplicación completa
  • InputBox: aquí es donde un usuario ingresaría su cadena
  • CharacterBox: aquí es donde me gustaría mostrar mi número de caracteres

Esto es lo que tengo hasta ahora:

 class InputBox extends React.Component { constructor(props) { super(props); this.state = { value: null, } } render() { return ( <label> Input: <textarea type="text" value={this.state.value} onChange={() => this.props.onChange(this.state.value)} /> </label> ); } } class CharacterBox extends React.Component { render() { return ( <div>Character Count:{this.props.charCount}</div> ) } } class SegmentCalculator extends React.Component { constructor(props) { super(props); this.state = { inputChars: null, }; } handleChange(value) { this.setState({ inputChars: value, inputCharsLength: value.length, }); } render() { let charaterCount = this.state.inputCharsLength; return ( <div className="segment-calculator"> <div className="input-box"> <InputBox onChange={() => this.handleChange()} /> </div> <div className="characters"> <CharacterBox charCount={charaterCount}/> </div> </div> ); } }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Tiene una entrada semicontrolada, lo que significa que tiene un estado local pero no lo actualiza.

Pase el estado de entrada del padre.

InputBox: pasa la propiedad de value al elemento textarea . Pase el valor de destino del evento onChange a la propiedad de devolución de llamada onChange .

 class InputBox extends React.Component { render() { return ( <label> Input: <textarea type="text" value={this.props.value} onChange={(e) => this.props.onChange(e.target.value)} /> </label> ); } }

SegmentCalculator: pase this.state.inputChars a la propiedad de value InputBox . La longitud de entrada se deriva del estado, por lo que no hay razón para almacenarla en el estado.

 class SegmentCalculator extends React.Component { constructor(props) { super(props); this.state = { inputChars:'', }; } handleChange = (value) => { this.setState({ inputChars: value, }); } render() { const { inputChars } = this.state; return ( <div className="segment-calculator"> <div className="input-box"> <InputBox onChange={this.handleChange} value={inputChars} /> </div> <div className="characters"> <CharacterBox charCount={inputChars.length}/> </div> </div> ); } }

 class InputBox extends React.Component { render() { return ( <label> Input: <textarea type="text" value={this.props.value} onChange={(e) => this.props.onChange(e.target.value)} /> </label> ); } } class CharacterBox extends React.Component { render() { return ( <div>Character Count:{this.props.charCount}</div> ) } } class SegmentCalculator extends React.Component { constructor(props) { super(props); this.state = { inputChars: '', }; } handleChange = (value) => { this.setState({ inputChars: value, }); } render() { const { inputChars } = this.state; return ( <div className="segment-calculator"> <div className="input-box"> <InputBox onChange={this.handleChange} value={inputChars} /> </div> <div className="characters"> <CharacterBox charCount={inputChars.length}/> </div> </div> ); } } const rootElement = document.getElementById("root"); ReactDOM.render( <SegmentCalculator />, 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" />

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda