Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

119
Views
Pase los mismos accesorios a múltiples componentes React

Actualmente estoy renderizando dos componentes diferentes según el valor de shouldRenderPlanA ; sin embargo, a pesar de que se renderizan diferentes componentes (según el valor), paso los mismos accesorios. ¿Cómo puedo condensar esto para reducir el código repetido?

 return ( <> {options.map(option)} <StyledRow> {variousOptions.map((opt) => ( shouldRenderPlanA ? ( <StyledLabelOptionOne variousProps={variousProps} variousProps={variousProps} variousProps={variousProps} /> ) : ( <StyledLabelOptionTwo variousProps={variousProps} variousProps={variousProps} variousProps={variousProps} /> ) ))} </StyledRow> </> );
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Para pasar los mismos accesorios a varios componentes de React o para pasar varios accesorios a un componente de React, puede usar el desempaquetado/destrucción de objetos dentro de los componentes.

 function Component() { const propPack = { variousProps1: variousProps1, variousProps2: variousProps2, variousProps3: variousProps3, }; return ( <> {options.map(option)} <StyledRow> {variousOptions.map((opt) => ( shouldRenderPlanA ? <StyledLabelOptionOne {...propPack} /> : <StyledLabelOptionTwo {...propPack} /> ))} </StyledRow> </> ); }

Esto se usa comúnmente para pasar todos los accesorios de los padres a los niños.

 function Component(props) { return ( condition ? <StyledLabelOptionOne {...props} /> : <StyledLabelOptionTwo {...props} /> ) }

También puede elegir condicionalmente el componente para renderizar (pero este en mi humilde opinión es menos legible)

 function Component() { const PickedComponent = shouldRenderPlanA ? StyledLabelOptionOne : StyledLabelOptionTwo; return ( <> {options.map(option)} <StyledRow> {variousOptions.map((opt) => ( <PickedComponent variousProps1={variousProps1} variousProps2={variousProps2} variousProps3={variousProps3} /> ))} </StyledRow> </> ); }

Para condiciones/accesorios derivados de .map() simplemente mueva el código dentro de la devolución de llamada del mapa

 function Component() { return ( <> {options.map(option)} <StyledRow> {variousOptions.map((opt) => { const propPack = { variousProps1: variousProps1, variousProps2: opt.value, }; const PickedComponent = opt.condition ? StyledLabelOptionOne : StyledLabelOptionTwo; return ( shouldRenderPlanA ? <StyledLabelOptionOne {...propPack} /> : <StyledLabelOptionTwo {...propPack} /> ) })} </StyledRow> </> ); }

Observe cómo la función de flecha dentro del mapa se ha convertido en una función de flecha con un bloque completo. De (opt) => (first_instruction) a (opt) => { first_instruction; return (second_instruction); } . Esto nos permite agregar código antes de renderizar en cada ciclo map() .

about 4 years ago · Juan Pablo Isaza Report

0

Puede asignar ambas opciones a una variable que contiene una unión de ambos tipos de componentes.

Combinar y luego esparcir los accesorios de un objeto también puede ser beneficioso, dependiendo de dónde provengan esos accesorios. Si se toman de opt dentro del mapa, entonces este segundo paso probablemente no sea necesario:

 const LabelComponent = shouldRenderPlanA ? StyledLabelOptionOne : StyledLabelOptionTwo; return ( <> {options.map(option)} <StyledRow> {variousOptions.map((opt) => ( <LabelComponent prop1={opt.prop1} prop2={opt.prop2} /> ))} </StyledRow> </> );
about 4 years ago · Juan Pablo Isaza Report

0

Podrías usar la API React Context . Esto le permitiría compartir los accesorios entre varios niños sin pasárselo a cada uno de ellos explícitamente.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!