Пачнанне новы React праект

Калі вы хочаце стварыць новую праграму або новы вэб-сайт цалкам на React, мы рэкамендуем выбраць адзін з фрэймворкаў на базе React, папулярных у абшыны. Фрэймворк забяспечваюць функцыі, якія ў патрэбны большасці праграм і сайтаў, уключаючы маршрутызацыю, выбарку даных і генерацыю HTML.

Note

Вам трэба ўсталяваць Node.js для лакальнага развіцця. Вы можаце таксама выкарыстоўваць Node.js у вытворчасці, але гэта неабавязкова. Многія React фрэймворкі падтрымліваюць экспарт у статычны HTML/CSS/JS.

Production-grade React frameworks

Next.js

Next.js гэта поўны стэк React фрэймворка. Ён разнабокавы і дазваляе ствараць React програму любога памеру - ад статычнага блога да складанай дынамічнай програмы. Каб стварыць новы Next.js праект, запусціце ў вашым тэрмінале:

Terminal
npx create-next-app

Калі вы новы у Next.js, азнаёмцеся з падручнікам па Next.js.

Next.js падтрымліваецца Vercel. Вы можаце разгортваць праграму Next.js на любым Node.js або бессерверным хостынгу, або на вашым уласным серверы. Цалкам статычныя праграма на Next.js можна разгарнуць на любым статычным хостынгу.

Remix

Remix гэта React фрэймворк з поўным стэкам і ўкладзенай маршрутызацыяй. Ён дазваляе разбіваць вашу праграму на ўкладзеныя часткі, якія могуць загружаць дадзеныя паралельна і абнаўляць у адказ на дэеянні карыстальніка. Каб стварыць новы Remix праект, запусціце:

Terminal
npx create-remix

Калі вы новы у Remix, азнаёмцеся з падручнікам па блогу (кароткі) і [падручнікам па праграме] (https://remix. run/docs/en/main/tutorials/jokes) (доўгі).

Remix падтрымліваецца Shopify. Калі вы ствараеце Remix праект, вам трэба выбраць мішень развіцця. Вы можаце разгарнуць Remix праграму на любым Node.js або бессерверным хостынгу, выкарыстоўваючы або напісаўшы адаптар.

Gatsby

Gatsby гэта React фрэймворк для хуткіх CMS вэб-сайтаў. У яго багатая экасістэма плагінаў і ўзровень GraphQL даных спрашчаюць інтэграцыю змесціва, API і сэрвісаў на адным вэб-сайце. Каб стварыць новы Gatsby праект, запусціце:

Terminal
npx create-gatsby

Калі вы новы у Gatsby, азнаёмцеся з падручнікам па Гэтсбі.

Gatsby падтрымліваецца Netlify. Вы можаце разгарнуць цалкам статычны Gatsby сайт на любым статычным хостынгу. Калі вы выкарыстоўваеце функцый толькі для сервера, пераканайцеся, што ваш правайдэр хостынгу падтрымлівае іх для Gatsby.

Expo (for native apps)

Expo гэта React фрэймворк, які дазваляе ствараць універсальныя праграмы для Android, iOS і вэб-праграмы з сапраўды ўласнымі інтэрфейсам. Ён забяспечвае SDK для React Native, што палягчае выкарыстанне натыўных частак. Каб стварыць новы Expo праект, запусціце:

Terminal
npx create-expo-app

Калі вы новы у Expo, азнаёмцеся з падручнікам Expo.

Expo падтрымліваецца Expo (кампаніі). Стварэнне праграм з дапамогай Expo бясплатнае, і вы можаце адпраўляць іх у крамы прыкладанняў Google і Apple без абмежаванні. Expo дадаткова прадастаўляе платныя воблачныя паслугі.

Deep Dive

Ці могу я выкарыстоўваць React без фрэймворка?

Вы можаце выкарыстоўваць React без фрэймворка - як бы вы выкарыстоўвалі React для часткі вашай старонкі. Аднак, калі вы ствараеце новую праграму або сайт цалкам з React, мы рэкамендуем выкарыстоўваць фрэймворк.

Вось чаму.

Нават калі спачатку вам не патрэбна маршрутызацыя або выбарка даных, вы, верагодна, захочаце дадаць для іх некаторыя бібліятэкі. Як ваш JavaScript расце з кожнай новай функцыяй, вам магчыма прыйдзецца разабрацца, як падзяліць код для кожнага маршруту асобна. Па меры таго, як вашыя патрэбы ў выбарцы даных становяцца складанымі, вы, верагодна, сутыкнецеся з вадаспадамі сеткі сервер-кліент, якія робяць вашу праграму вельмі павольнай. Паколькі ваша аўдыторыя ўключае больш карыстальнікаў з дрэнным падключэннем сеткі і прыладамі нізкага класа, вам можа спатрэбіцца згенераваць HTML з вашых кампанентаў для ранняга адлюстравання кантэнту - альбо на серверы, або падчас зборкі. Змяніць налады для выканання часткі вашага кода на серверы або падчас зборкі можа быць вельмі складана.

Гэтыя праблемы не звязаны з React. Вось чаму ў Svelte ёсць SvelteKit, а у Vue ёсць Nuxt і далей. Каб самастойна вырашыць гэтыя праблемы, вам спатрэбіцца інтэграваць зборшчык з маршрутызатарам і бібліятэкай выбарцы даных. Нескладана усталявать першапачатковую наладу, але ёсць шмат тонкасці, звязаных з стварэннем праграмы, якая хутка загружаецца, нават калі яна расце з цягам часу. Вы захочаце адправіць мінімальны аб’ём кода прыкладання, але зрабіць гэта за адзін раз кліент-сервер, паралельна з любымі дадзенымі, неабходнымі для старонкі. Верагодна, вы захочаце, каб старонка была інтэрактыўнай яшчэ да запуску кода JavaScript, каб падтрымліваць прагрэсіўнае паляпшэнне. Магчыма, вы захочаце стварыць цалкую папку з статычнымі файламі HTML для вашэго маркетынгавых старонак, якія можна размясціць дзе заўгодна і пры гэтым працаваць з адключаным JavaScript. Стварэнне гэтых магчымасцей самастойна патрабуе сур’ёзнай працы.

React фреймворкі на гэтай старонцы вырашаюць гэтыя праблемы па змаўчанні, без дадатковай працы з вашага боку. Яны дазваляюць вам пачаць вельмі эканомна, а потым маштабаваць праграму ў адпаведнасці з вашымі патрэбамі. Кожны React фрэймворк мае суполку, таму знаходзіць адказы на пытанні і абнаўляць інструменты прасцей. Фреймворкі таксама надае структуру вашаму коду, дапамагаючы вам і іншым захоўваць кантэкст і навыкі паміж рознымі праектамі. Наадварот, пры карыстальнай наладзе гэта лягчэй затрымацца на непадтрымоўваных залежнасцяў, і вы, па сутнасці, створыце ваш ўласный фреймворк без супольнасці або абнаўлення (і калі гэта нешта падобнае да тых, якія мы зрабілі ў мінулае, больш бессістэмна).

Калі вы яшчэ не перакананыя, або ваша праграма мае незвычайныя абмежаванні, якія не абслугоўваюцца добра гэтымі фрэймворкамі, і вы хочаце запусціць сваю ўласную наладу, мы не можам вас спыніць - дерзайте! Вазьміце react і react-dom з npm, наладзьце свой уласны працэс зборкі з дапамогай зборшчыка, напрыклад Vite або Parcel, і па меры неабходнасці дадавайце іншыя інструменты для маршрутызацыі, статычнай генерацыі або візуалізацыі на баку сервера і далей.

Перадавыя React фрэймворкі

Калі мы разведалі, як працягваць React удасканальваць, мы зразумелі, што больш цесная інтэграцыя React з фрэймворкамі (у прыватнасці, з маршрутызацыяй, групаваннем і сервернымі тэхналогіямі) - гэта наша самая вялікая магчымасць дапамагчы React карыстальнікам ствараць лепшыя прыкладанні. Каманда Next.js пагадзілася супрацоўнічаць з намі ў даследаванні, распрацоўцы, інтэграцыі і тэсціраванні сучасных функцый React, якія не залежаць ад фрэймворка, такіх як Кампаненты сервера React.

Гэтыя функцыі з кожным днём набліжаюцца да вытворчасці, і мы вялі перамовы з іншымі распрацоўшчыкамі зборшчыкаў і фрэймворкаў аб іх інтэграцыі. Мы спадзяемся, што праз год але два ўсе фрэймворкі, пералічаныя на гэтай старонцы, будуць мець поўную падтрымку гэтых функцый. (Калі вы аўтар фрэймворка і зацікаўлены ў супрацоўніцтве з намі для эксперыментаў з гэтымі функцыямі, паведаміце нам аб гэтым!)

Маршрутызатар Next.js прыкладанняў

Маршрутызатар Next.js прыкладанняў гэта рэдызайн запуску Next.js API, які выконвае бачанне архітэктуры поўнага стэка React каманды. Гэта дазваляе вам атрымліваць дадзеныя ў сінхронных кампанентах, якія працуюць на серверы або нават падчас зборкі.

Next.js падтрымліваецца Vercel. Вы можаце разгарнуць Next.js праграму на любым Node.js або бессерверным хостынгу, або на вашым уласным серверы. Next.js таксама падтрымлівае статычны экспарт, які не патрабуе сервера.

Pitfall

Маршрутызатар Next.js прыкладанняў у цяперашні час знаходзіцца ў бэта-версіі і пакуль не рэкамендуецца для вытворчасці (па стане на сакавік 2023 году). Каб паэксперыментаваць з ім у існуючым праекце Next.js, прытрымлівайцеся гэтага кіраўніцтва па паступовай міграцыі.

Deep Dive

Якія функцыі складаюць бачанне поўнай архітэктуры React каманды?

Зборнік маршрутызатараў прыкладанняў Next.js цалкам рэалізуе афіцыйную React Server спецыфікацыя кампанентаў. Гэта дазваляе змяшаць кампаненты часу зборкі, серверныя і інтэрактыўныя кампаненты ў адным дрэве React.

Напрыклад, вы можаце напісаць толькі серверны кампанент React як async функцыю, якая чытае з базы дадзеных або з файла. Затым вы можаце перадаваць дадзеныя з яго ў інтэрактыўныя кампаненты:

// Гэты кампанент працуе *толькі* на серверы (або падчас зборкі).
async function Talks({ confId }) {
// 1. Вы знаходзіцеся на серверы, таму можаце размаўляць са сваім узроўнем дадзеных. API не патрабуецца.
const talks = await db.Talks.findAll({ confId });

// 2. Дадайце любую колькасць логікі рэндэрынгу. Гэта не павялічыць ваш JavaScript пакет.
const videos = talks.map(talk => talk.video);

// 3. Перадайце дадзеныя кампанентам, якія будуць працаваць у браўзеры.
return <SearchableVideoList videos={videos} />;
}

Маршрутызатар прыкладанняў Next.js таксама інтэгруе атрыманне даных з Suspense. Гэта дазваляе вам вызначаць стан загрузкі (напрыклад, запаўняльнік шкілета) для розных частак вашага карыстальніцкага інтэрфейсу непасрэдна ў вашым дрэве React:

<Suspense fallback={<TalksLoading />}>
<Talks confId={conf.id} />
</Suspense>

Серверныя кампаненты і Suspense - гэта React функцыі, а не Next.js функцыі. Аднак іх прыняцце на рамачным узроўні патрабуе ўдзелу і нетрывіяльнай працы па рэалізацыі. На дадзены момант Маршрутызацыя Next.js прыкладання з’яўляецца найбольш поўнай рэалізацыяй. Каманда React працуе з распрацоўшчыкамі зборнікаў, каб палегчыць укараненне гэтых функцый у фрэймворкі наступнага пакалення.