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

107
Views
Add additional props to component in a foreach loop

i have a component in React that receives some elements (photos), i have a object with this composition:

getItems() {
    const { gallery } = this.props;
    const { content_elements: contentElements } = gallery;
    const items = [];

    if (contentElements) {
      contentElements.forEach((photo, index) => {
        let item = (
          <div key={photo.id} className="gal__fig-item">
            <Image
              srcset="gallery"
              figureClassName="mm"
              imgClassName="mm__img"
              noZoom={true}
              showCaption={false}
              wrapperClassName="mm__wr"
              {...photo}/>
          </div>
        );           

        items.push(item);
      });
    }

    return items;
  }

I need to add a prop in the image component, but only in the first element (index = 0).

I do this:

getItems() {
    const { gallery } = this.props;
    const { content_elements: contentElements } = gallery;
    const items = [];

    if (contentElements) {
      contentElements.forEach((photo, index) => {
        let item = (
          <div key={photo.id} className="gal__fig-item">
            <Image
              srcset="gallery"
              figureClassName="mm"
              imgClassName="mm__img"
              noZoom={true}
              showCaption={false}
              wrapperClassName="mm__wr"
              {...photo}/>
          </div>
        );
        if(index === 0){
           item = (
            <div key={photo.id} className="gal__fig-item">
              <Image
                srcset="gallery"
                figureClassName="mm"
                imgClassName="mm__img"
                noZoom={true}
                showCaption={false}
                hasLazyLoad={false}
                wrapperClassName="mm__wr"
                {...photo}/>
            </div>
          );
        }

        items.push(item);
      });
    }

    return items;
  }

That works, but....maybe there is an other option, more clean code, to do it? Someone can help me? Thanks

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

you can set hasLazyLoad based on the value of i:

 if (contentElements) {
      contentElements.forEach((photo, index) => {
        let item = (
            <div key={photo.id} className="gal__fig-item">
              <Image
                srcset="gallery"
                figureClassName="mm"
                imgClassName="mm__img"
                noZoom={true}
                showCaption={false}
                hasLazyLoad={i !== 0} // use i !== 0 to false when i = 0
                wrapperClassName="mm__wr"
                {...photo}/>
            </div>
          );
        }
    ```
about 4 years ago · Juan Pablo Isaza Report

0

I would replace forEach to map and add ternary operator for hasLazoLoad prop:

getItems() {
  const { gallery } = this.props;
  const { content_elements: contentElements } = gallery;

  const items = contentElements?.map((photo, index) => {
    return <div key={photo.id} className="gal__fig-item">
      <Image
        srcset="gallery"
        figureClassName="mm"
        imgClassName="mm__img"
        noZoom={true}
        showCaption={false}
        hasLazyLoad={index === 0 ? false : true}
        wrapperClassName="mm__wr"
        {...photo} />
    </div>
  }) || [];

  return items;
}
about 4 years ago · Juan Pablo Isaza Report

0

I suggest this :

if index was zero then hasLazyload will be false and vise versa

getItems() {
        const { gallery } = this.props;
        const { content_elements: contentElements } = gallery;
        const items = [];
    
        if (contentElements) {
          contentElements.forEach((photo, index) => {
            let item = (
              <div key={photo.id} className="gal__fig-item">
                <Image
                  srcset="gallery"
                  figureClassName="mm"
                  imgClassName="mm__img"
                  noZoom={true}
                  showCaption={false}
                  hasLazyLoad = {index !== 0}  
                  wrapperClassName="mm__wr"
                  {...photo}/>
              </div>
            );           
    
            items.push(item);
          });
        }
    
        return items;
      }
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!