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

203
Visualizações
Carga perezosa un componente React de una matriz de objetos

Hice para mí un Proyecto-Tutorial donde colecciono varios Ejemplos de Reacción de fácil a difícil. Hay una representación condicional de "cambio/caso" en App.js, donde yo, dependiendo del ListBox ItemIndex, cargo y ejecuto el Componente seleccionado.

Estoy tratando de optimizar mi código React eliminando la función "cambiar/caso" y reemplazándola con una matriz bidimensional, donde la primera columna contiene el Nombre del componente, la segunda columna el Objeto. Además, me gustaría cargar de forma diferida los componentes seleccionados.

Todo parece funcionar bien, también puedo capturar los eventos del mouse y también comienza la nueva representación, pero la pantalla se vuelve blanca... no hay representación de componentes.

Aplicación.js

 import SampleList, { sampleArray } from './SampleList'; class App extends React.Component { constructor(props) { super(props); this.selectedIndex = -1; } renderSample(index) { if((index >= 0) && (index < sampleArray.length)) { return React.createElement(sampleArray[index][1]) } else { return <h3>Select a Sample</h3>; } } render() { return ( <header> <h1>React Tutorial</h1> <SampleList myClickEvent={ this.ClickEvent.bind(this) }/> <p /> <div> <Suspense> /**** HERE WAS MY ISSUE ****/ { this.renderSample(this.selectedIndex) } </Suspense> </div> </header> ); } ClickEvent(index) { this.selectedIndex = index; this.forceUpdate(); } }

SampleList.js

 import React from 'react'; const SimpleComponent = React.lazy(() => import('./lessons/SimpleComponent')); const IntervalTimerFunction = React.lazy(() => import('./lessons/IntervalTimerFunction')); const sampleArray = [ ["Simple Component", SimpleComponent], ["Interval Timer Function", IntervalTimerFunction] ]; class SampleList extends React.Component { constructor(props) { super(props); this.myRef = React.createRef(); this.selectOptions = sampleArray.map((Sample, Index) => <option>{ Sample[0] }</option> ); } render() { return ( <select ref={this.myRef} Size="8" onClick={this.selectEvent.bind(this)}> { this.selectOptions } </select> ); } selectEvent() { this.props.myClickEvent(this.myRef.current.selectedIndex); } } export default SampleList; export { sampleArray };
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Tienes varios problemas en ese código:

  • Si usa React.lazy para importar componentes dinámicamente, use Suspense para mostrar un respaldo;
  • El select puede escuchar el evento de change , y recibir el valor de la opción seleccionada, eso es conveniente para pasar el índice en su caso;
  • Cambiar una referencia con un nuevo índice no activa una nueva representación de su árbol de componentes, debe realizar un setState con el índice seleccionado;
  • Le sugiero que cambie a ganchos, para tener algunas optimizaciones de código;
  • Código:
 import React, { Suspense, useState, useMemo } from 'react'; const SimpleComponent = React.lazy(() => import('./lessons/SimpleComponent')); const IntervalTimerFunction = React.lazy(() => import('./lessons/IntervalTimerFunction')); const sampleArray = [ ['Simple Component', SimpleComponent], ['Interval Timer Function', IntervalTimerFunction], ]; export default function App() { const [idx, setIdx] = useState(0); const SelectedSample = useMemo(() => sampleArray[idx][1], [idx]); const handleSelect = (idx) => setIdx(idx); return ( <Suspense fallback={() => <>Loading...</>}> <SampleList handleSelect={handleSelect} /> <SelectedSample /> </Suspense> ); } class SampleList extends React.Component { constructor(props) { super(props); } selectEvent(e) { this.props.handleSelect(e.target.value); } render() { return ( <select ref={this.myRef} Size="8" onChange={this.selectEvent.bind(this)}> {sampleArray.map((sample, idx) => ( <option value={idx}>{sample[0]}</option> ))} </select> ); } }

Ejemplo de trabajo AQUÍ

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