• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

react - dobre praktyki, code review componentu

Object Storage Arubacloud
+1 głos
90 wizyt
pytanie zadane 1 września 2020 w JavaScript przez rob Bywalec (2,440 p.)

Witam, 

mam pytanie odnośnie dobrych praktyk w react.js, mam taki component

import React from 'react'
import { useInView } from "react-intersection-observer";
import { motion } from "framer-motion";

function SectionOne() {
    const [ref1, inView1] = useInView({
        rootMargin: '450px 0px',
    })
    const [ref2, inView2] = useInView({
        rootMargin: '450px 0px',
    })
    const [ref3, inView3] = useInView({
        rootMargin: '450px 0px',
    })
    const [ref4, inView4] = useInView({
        rootMargin: '450px 0px',
    })
    const [ref5, inView5] = useInView({
        rootMargin: '450px 0px',
    })

    const offer = [
        {
            picture: '1',
            name: 'Instalacje elektryczne',
            text: 'Instalacje Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores minima est aliquam fugiat, sed aperiam nulla doloremque alias eligendi amet eum maxime temporibus, odio mollitia iste hic praesentium laborum architecto enim illo! At esse, temporibus harum voluptatum sit non! Neque! Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore molestiae, earum, illum doloremque ducimus quidem dolore debitis saepe, excepturi odio voluptatibus! Commodi nostrum delectus accusamus esse aut minima, sunt neque molestias excepturi rerum perspiciatis nihil sapiente perferendis quaerat laudantium velit? ',
            ref: ref1,
            inView: inView1,
            points: () => {
                return (
                    <>
                        <div className="offer-points-slogan">Instalacja odbiorcza może składać się z następujących obwodów</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>oświetlenia ogólnego,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>gniazd wtyczkowych</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>kuchni elektrycznej,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>elektrycznego podgrzewacza wody,</div>
                    </>
                )
            }
        },
        {
            picture: '2',
            name: 'Fotowoltaika',
            text: 'Instalacje Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores minima est aliquam fugiat, sed aperiam nulla doloremque alias eligendi amet eum maxime temporibus, odio mollitia iste hic praesentium laborum architecto enim illo! At esse, temporibus harum voluptatum sit non! Neque! Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore molestiae, earum, illum doloremque ducimus quidem dolore debitis saepe, excepturi odio voluptatibus! Commodi nostrum delectus accusamus esse aut minima, sunt neque molestias excepturi rerum perspiciatis nihil sapiente perferendis quaerat laudantium velit? ',
            ref: ref2,
            inView: inView2,
            points: () => {
                return (
                    <>
                        <div className="offer-points-slogan">Instalacja odbiorcza może składać się z następujących obwodów</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>oświetlenia ogólnego,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>gniazd wtyczkowych</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>kuchni elektrycznej,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>elektrycznego podgrzewacza wody,</div>
                    </>
                )
            }
        },
        {
            picture: '3',
            name: 'Awarie elektryczne',
            text: 'Instalacje Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores minima est aliquam fugiat, sed aperiam nulla doloremque alias eligendi amet eum maxime temporibus, odio mollitia iste hic praesentium laborum architecto enim illo! At esse, temporibus harum voluptatum sit non! Neque! Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore molestiae, earum, illum doloremque ducimus quidem dolore debitis saepe, excepturi odio voluptatibus! Commodi nostrum delectus accusamus esse aut minima, sunt neque molestias excepturi rerum perspiciatis nihil sapiente perferendis quaerat laudantium velit? ',
            ref: ref3,
            inView: inView3,
            points: () => {
                return (
                    <>
                        <div className="offer-points-slogan">Instalacja odbiorcza może składać się z następujących obwodów</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>oświetlenia ogólnego,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>gniazd wtyczkowych</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>kuchni elektrycznej,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>elektrycznego podgrzewacza wody,</div>
                    </>
                )
            }
        },
        {
            picture: '4',
            name: 'Serwis i naprawa',
            text: 'Instalacje Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores minima est aliquam fugiat, sed aperiam nulla doloremque alias eligendi amet eum maxime temporibus, odio mollitia iste hic praesentium laborum architecto enim illo! At esse, temporibus harum voluptatum sit non! Neque! Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore molestiae, earum, illum doloremque ducimus quidem dolore debitis saepe, excepturi odio voluptatibus! Commodi nostrum delectus accusamus esse aut minima, sunt neque molestias excepturi rerum perspiciatis nihil sapiente perferendis quaerat laudantium velit? ',
            ref: ref4,
            inView: inView4,
            points: () => {
                return (
                    <>
                        <div className="offer-points-slogan">Instalacja odbiorcza może składać się z następujących obwodów</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>oświetlenia ogólnego,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>gniazd wtyczkowych</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>kuchni elektrycznej,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>elektrycznego podgrzewacza wody,</div>
                    </>
                )
            }
        },
        {
            picture: '5',
            name: 'Pomiary elektryczne',
            text: 'Instalacje Lorem ipsum dolor sit amet consectetur adipisicing elit. Dolores minima est aliquam fugiat, sed aperiam nulla doloremque alias eligendi amet eum maxime temporibus, odio mollitia iste hic praesentium laborum architecto enim illo! At esse, temporibus harum voluptatum sit non! Neque! Lorem ipsum dolor sit amet consectetur adipisicing elit. Labore molestiae, earum, illum doloremque ducimus quidem dolore debitis saepe, excepturi odio voluptatibus! Commodi nostrum delectus accusamus esse aut minima, sunt neque molestias excepturi rerum perspiciatis nihil sapiente perferendis quaerat laudantium velit? ',
            ref: ref5,
            inView: inView5,
            points: () => {
                return (
                    <>
                        <div className="offer-points-slogan">Instalacja odbiorcza może składać się z następujących obwodów</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>oświetlenia ogólnego,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>gniazd wtyczkowych</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>kuchni elektrycznej,</div>
                        <div><i className="fas fa-long-arrow-alt-right"></i>elektrycznego podgrzewacza wody,</div>
                    </>
                )
            }
        },
    ]
    const mainVariants1 = {
        hidden: {
            y: 200,
            opacity: 0,
        },
        visible: {
            y: 0,
            opacity: 1,
        }
    }

    const displayOffer = offer.map((each) => {
        return (
            <div class="offer-wrapper">
                <motion.div class={`offer-wrapper-picture${each.picture}`} ref={each.ref} initial={{ opacity: 0, x: -200 }} animate={each.inView ? ({ x: 0, opacity: 1 }) : ({})} transition={{ delay: 1, ease: "easeOut", duration: 0.5 }}></motion.div>
                <div class="offer-wrapper-right">
                    <motion.div class="offer-wrapper-name" variants={mainVariants1} initial='hidden' ref={each.ref} animate={each.inView ? ('visible') : ({})} transition={{ ease: "easeOut", duration: 1, delay: 0 }}>{each.name}</motion.div>
                    <motion.div class="offer-text" variants={mainVariants1} initial='hidden' ref={each.ref} animate={each.inView ? ('visible') : ({})} transition={{ delay: 0.2, ease: "easeOut", duration: 0.5 }}>{each.text}</motion.div>
                    <motion.div class="offer-points" variants={mainVariants1} initial='hidden' ref={each.ref} animate={each.inView ? ('visible') : ({})} transition={{ delay: 0.4, ease: "easeOut", duration: 0.5 }}>
                        {each.points()}
                    </motion.div>
                    <motion.div class="offer-line" variants={mainVariants1} initial='hidden' ref={each.ref} animate={each.inView ? ('visible') : ({})} transition={{ delay: 0.6, ease: "easeOut", duration: 0.5 }}></motion.div>
                </div>
            </div>
        )
    }
    )
    return (
        <div className='section-one-container'>
            <div className="parallax-one"></div>
            <div className="offer-container">
                <div class="offer-title">Oferta</div>
                {displayOffer}
            </div>
        </div>
    )
}

export default SectionOne

w tym komponencie definiuję zmienną displayOffer która zwraca mi poszczególną ofertę, i pożniej ta zmienna jest renderowana. obiło mi się o uszy, że tak nie powinienem robić, że ta zmienna powinna być definiowana poza funkcją SectionOne tzn w nowym komponencie, czy to prawda?

proszę o code review całego komponentu

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 260 wizyt
pytanie zadane 9 października 2020 w JavaScript przez rob Bywalec (2,440 p.)
+1 głos
0 odpowiedzi 180 wizyt
pytanie zadane 10 września 2020 w JavaScript przez creend Gaduła (4,700 p.)
0 głosów
0 odpowiedzi 79 wizyt
pytanie zadane 6 kwietnia 2020 w JavaScript przez Stoprocent Użytkownik (930 p.)

92,573 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...