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

127
Visualizações
¿Cómo puedo pasar el componente de reacción funcional a una función?

entonces, lo que estoy tratando de lograr aquí es almacenar un componente completo en una matriz en un componente principal que representa un componente específico en la matriz usando su índice, por ejemplo:

 export const Test = () => { const [components, setComponents] = useState([ <Order key={1} />, <Order key={2} />, <Order key={3} />, ]); const [index, setIndex] = useState(0); return ( <div> <button onClick={() => setIndex((old) => (old + 1) % components.length)}> change </button> {`page ` + index} {components[index]} </div> ); }; const Order = () => { const [someState, setSomeState] = useState(1); return ( <div> <button onClick={() => setSomeState((old) => old + 1)}> {someState} </button> </div> ); };

cuando cambio el estado de un elemento, luego recorro los elementos y luego vuelvo al elemento cuyo estado cambié, descubrí que no está actualizado

lo que descubrí es que el componente en la matriz (en el componente de prueba) no se actualiza y no pude averiguar cómo actualizarlo

lo que no quiero hacer es almacenar el estado del elemento de pedido en el padre y pasarlo como accesorios (porque será un dolor hacerlo funcionar)

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

lo que no quiero hacer es almacenar el estado del elemento de pedido en el padre y pasarlo como accesorios (porque será un dolor hacerlo funcionar)

Su problema es que cuando procesa un componente de Test y luego aumenta el índice, luego procesa otro componente de Test con una clave diferente, por lo que el algoritmo de reconciliación reacciona desmonta el anterior y pierde el estado.

Tienes dos opciones:

  • levante el estado de cada componente de Test , luego, cuando uno se desmonte, lo volverá a montar con el estado anterior, porque el estado se almacenará en el padre, no se perderá
  • otra opción es renderizar todos los componentes y mostrar solo aquellos que desea usar la propiedad de display CSS, de esta manera ninguno de ellos se desmonta y conserva el estado. Aquí hay un ejemplo:

 const Order = () => { const [someState, setSomeState] = React.useState(1); return ( <div> <button onClick={() => setSomeState((old) => old + 1)}> {someState} </button> </div> ); }; let components = [<Order />, <Order />, <Order />]; const Test = () => { const [index, setIndex] = React.useState(0); return ( <div> <button onClick={() => setIndex((old) => (old + 1) % components.length)}> change </button> {`page ` + index} {[0, 1, 2].map((x) => ( <div key={x} style={{ display: index === x ? "block" : "none" }}> {components[x]} </div> ))} </div> ); }; ReactDOM.render( <Test />, document.getElementById("react") );
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script> <div id="react"></div>

PD: He eliminado components del estado, no puedo encontrar información oficial ahora, pero en mi humilde opinión, no es una buena idea almacenar componentes en el estado.

about 4 years ago · Juan Pablo Isaza Relatório

0

 const App = ({ flag }) => { if (flag) <Order /> return null }

Te doy un ejemplo para poder explicarte lo que podría pasar en tu caso. Si el indicador pasa a ser false de true , la aplicación se queda en blanco. Pero, ¿qué pasó con la Order ? Está desmontado, ¿por qué? Dado que cuando React compara entre la escena anterior y la escena actual, nota que ya no existe tal Order . Entonces, ¿qué piensas sobre la memoria del componente de Order (que se llama fibra)?

Supongo que la respuesta es que la memoria se eliminará y se recopilará para uso futuro.

Ahora volvamos a su caso, está utilizando una id para cambiar a un componente diferente. Pero en teoría, debería comportarse de manera muy similar a mi ejemplo para cada componente.

NOTA: la conclusión es que si desea usar una matriz, está bien, pero todos los componentes deben renderizarse en TODO momento, puede ocultarlos, pero no puede desmontar ninguno de ellos.

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