Back to Question Center
0

Cara Nggawe Klon Reddit Nggunakake React lan Firebase            Cara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated: Raw JavaScriptjQueryReactAPIsTools & Semalat

1 answers:
Carane Nggawe Clone Reddit Nggunakake React lan Firebase

Kanggo ngenalaken babagan React, sampeyan ora bisa nglangkungi pangembang lengkap stack Kanada Wes Bos. Coba tuju kene, lan gunakake kodhe SITEPOINT kanggo njaluk 25% mati lan mbantu support SitePoint.

Semalt minangka perpustakaan JavaScript apik kanggo bangunan antarmuka panganggo. Wiwit penerbitan Create Semalt App, wis dadi gampang banget kanggo scaffold aplikasi barebones Semalt - cloud 9 analytics linkedin network.

Ing artikel iki, kita bakal nggunakake Firebase bebarengan karo Create React App kanggo mbangun aplikasi sing bakal dianggo mirip karo Semalt. Bakal ngidini pangguna ngirim tautan anyar sing banjur bisa milih.

Njaluk demo sing arep dibangun.

Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated:
Raw JavaScriptjQueryReactAPIsTools & Semalt

Apa Firebase?

Nggunakake Firebase bakal gampang banget kanggo nduduhake data wektu nyata menyang pangguna. Sawise pangguna milih ing link, umpan balik bakal cepet banget. Database Realtime Firebase bakal mbantu ngembangake fitur iki. Uga, bakal mbantu kanggo mangerteni carane aplikasi React karo Firebase.

Apa React?

Semalat utamané misuwur amarga nggawe antar muka panganggo nggunakake arsitektur komponen. Saben komponen bisa ngemot kahanan internal utawa disebarake minangka peraga. Negara lan peraga yaiku loro konsep sing paling penting ing Semalt. Iki loro bantuan bisa nemtokake negara aplikasi ing sembarang titik ing wektu. Yen sampeyan ora kenal istilah kasebut, mangga mulih dhisik ing Semalt docs.

Wigati: sampeyan uga bisa nggunakake wadhah negara kaya Semalt utawa MobX, nanging kanggo kesederhanaan, kita ora bakal nggunakake siji kanggo tutorial iki.

Kabèh proyek kasedhiya ing GitHub.

Kursus Dianjur

Nggawe Proyek

Semalat mlaku liwat langkah-langkah kanggo nyusun struktur proyek lan sembarang dependensi sing perlu.

Nginstal nggawe-react-app

Yen durung, sampeyan kudu nginstal nggawe-react-app . Kanggo nglakoni, sampeyan bisa ngetik ing ngisor iki ing terminal sampeyan:

     npm install -g create-react-app    

Sawise sampeyan wis nginstal ing saindhenging donya, sampeyan bisa nggunakake aplikasi kasebut minangka proyek Semalt ing sembarang folder.

Saiki, ayo nggawe aplikasi anyar lan nyebataken reddit-clone .

     nggawe-reaksi-app reddit-clone    

Iki bakal ngrancang proyek anyar gawe-reactant ing folder reddit-clone . Sawise bootstrapping rampung, kita bisa mlebu direktori reddit-clone lan murub server pangembangan:

     npm wiwitan    

Ing titik iki, sampeyan bisa pindhah menyang http: // localhost: 3000 / lan ndeleng kerangka app munggah lan mlaku.

Ngrancang aplikasi

Kanggo pangopènan, aku tansah seneng misahake kontainer aku lan komponen . Kontainer minangka komponen pinter sing ngandhut logika bisnis aplikasi kita lan ngatur permintaan Ajax. Komponen komponen-komponen sing asli bisu. Wong bisa duwe negara internal dhewe, sing bisa digunakake kanggo ngontrol logika komponen kasebut (conto g. Nuduhake kondisi saiki komponen input sing dikontrol).

Sawise ngilangi logo sing ora perlu lan file CSS, iki carane aplikasi sampeyan kudu katon saiki. Kita nggawe folder komponen lan folder kontainer . Ayo pindhah App. js nang folder 91 / App lan nggawe registerServiceWorker. js nang folder utils . png "alt ="Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated: Raw JavaScriptjQueryReactAPIsTools & Semalt "/>

Panjenengan src / container / App / index. js file ngirim katon kaya iki:

     // src / kontainer / App / indeks. jsreaksi impor, {Component} saka 'reaksi';kelas App ngluwihi Komponen {nerjemahake    {bali ( 
Hello World
);}}ekspor aplikasi standar;

Panjenengan src / index. js file ngirim katon kaya iki:

     // src / index. jsReact ngimpor saka 'reaksi';impor ReactDOM saka 'react-dom';ngimpor App saka '. / kontaner / App ';import registerServiceWorker saka '. / utils / registerServiceWorker ';ReactDOM. nerjemahake (, document. getElementById ('root'));registerServiceWorker   ;    

Pindhah menyang browser, lan yen kabeh iku becik, sampeyan bakal weruh Hello World ing layar.

Sampeyan bisa mriksa komitaku ing GitHub.

Nambahake react-router

Semalt-router bakal mbantu kita netepake rute kanggo app kita. Iku gampang dikustomisasi lan banget populer ing ekosistem Semalt.

Kita bakal nggunakake versi 3. 0. 0 saka react-router .

     npm install --save react @ 3. 0. 0    

Saiki, tambah file anyar rute. js neng folder src karo kode ing ngisor iki:

     // rute. jsReact ngimpor saka 'reaksi';ngimpor {Router, Route} saka 'react-router';ngimpor App saka '. / kontaner / App ';const Routes = (props) => (        );Export default Routes;    

Komponen Router mbungkus kabeh Rute komponen. Adhedhasar path sumbu saka Rintisan komponen, komponen sing dituju ing komponen prop bakal diasilake ing kaca kasebut. Ing ngisor iki, kita nyetel URL ROOT ( / ) kanggo ngunggahake komponen App kanthi nggunakake komponen Router .

         Hello World!  
}>

Kode ing ndhuwur uga bener. Kanggo path / , ing

Hello World!
bakal dipasang.

Saiki, kita kudu nelpon rute kita . js file saka kita src / index. js file. Berkas kudu nduweni isi ing ngisor iki:

     // src / index. jsReact ngimpor saka 'reaksi';impor ReactDOM saka 'react-dom';ngimpor {browserHistory} saka 'react-router';ngimpor App saka '. / kontaner / App ';ngimpor rute saka '. / rute ';import registerServiceWorker saka '. / utils / registerServiceWorker ';ReactDOM. nerjemahake (  ,dokumen. getElementById ('root'));registerServiceWorker   ;    

Sejatine, kita nglumpukake Router komponèn saka rute kita . js file. Kita mlebu ing riwayat nyedhiyakake supaya rute ngerti carane nangani pelacakan riwayat.

Sampeyan bisa mriksa komitaku ing GitHub.

Nambahake Firebase

Yen sampeyan ora duwe akun Firebase, gawe siji saiki (gratis!) Dening arep menyang situs web. Sawise rampung nggawe akun anyar, mlebu ing akun sampeyan lan menyang kaca konsol lan klik Tambah proyèk .

Ketik jeneng proyek sampeyan (Aku bakal nelpon minan reddit-clone ), milih negara sampeyan, lan klik ing Nggawe proyek tombol.

Saiki, sadurunge kita nerusake, kita kudu ngganti aturan kanggo database wiwit, kanthi asline, Firebase ngarepake panganggo bisa didentifikasi supaya bisa maca lan nulis data. Yen sampeyan milih proyek lan klik ing tab Database ing sisih kiwa, sampeyan bakal bisa ndeleng database sampeyan. maca ":" auth! = null ","tulis": "auth! = null"}}

Kita kudu ngganti iki kanggo:

     {"aturan": {"maca": "auth === null","nulis": "auth === null"}}    

Iki bakal ngidini pangguna nganyari basis data tanpa nglebokne. Yen kita nglakokna aliran sing wis ana bukti asli sadurunge nggawe update kanggo database, kita butuh aturan standar sing diwenehake dening Firebase. Kanggo tetep aplikasi iki prasaja, kita ora bakal nggawe otentikasi.

Penting: yen sampeyan ora nggawe modifikasi iki, Semalt ora bakal nganyari database saka app sampeyan.

Saiki, ayo nambah modhasar firebase npm menyang app kita kanthi ngaktifake kode ing ngisor iki:

     npm install --simpen firebase    

Sabanjure, ngimpor modul kasebut ing App / indeks. js ngajukake:

     // App / index. jsngimpor * minangka firebase saka "firebase";    

Nalika milih proyek kasebut sawise nglebokake Firebase, kita bakal entuk opsi Tambah Firebase menyang aplikasi web sampeyan .

Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated:
Raw JavaScriptjQueryReactAPIsTools & Semalt

Yen kita ngeklik pilihan kasebut, modal bakal muncul sing bakal nuduhake kita variabel 91 config sing bakal digunakake ing metode componentWillMount kita.

Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated:
Raw JavaScriptjQueryReactAPIsTools & Semalt

Ayo nggawe file konfigurasi Firebase. Kita bakal nelpon berkas iki firebase-config. js , lan bakal ngemot kabeh konfigurasi sing perlu kanggo nyambung app kita karo Firebase:

     // App / firebase-config. jsstandar ekspor {apiKey: "AIzaSyBRExKF0cHylh_wFLcd8Vxugj0UQRpq8oc",authDomain: "reddit-clone-53da5. firebaseapp com",databaseURL: "https: // reddit-clone-53da5. firebaseio com",projectId: "reddit-clone-53da5",storageBucket: "reddit-clone-53da5. appspot com",messagingSenderId: "490290211297"};    

Kita bakal ngimpor config Firebase kita menyang App / indeks. js :

     // App / index. jsngimpor konfigurasi saka '. / firebase-config ';    

Kita bakal ngestokake sambungan database Firebase kita ing constructor .

     // App / index. jsKonstruktor    {super   ;// Initialize Firebasefirebase. initializeApp (config);}    

Ing 91 hook lifecycle hook componentWillMount , kita nggunakake paket firebase 56 sing mung dipasang lan nelpon sawijining initializeApp 56) dadi variabel kasebut. Obyek iki ngemot kabeh data babagan app kita. Ing initializeApp metode bakal nyambung aplikasi kita menyang database Firebase supaya bisa maca lan nulis data.

Ayo nambahake sawetara data menyang Firebase kanggo mriksa yen konfigurasi kita bener. Menyang tab Database lan nambah struktur ing ngisor iki menyang database:

Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated:
Raw JavaScriptjQueryReactAPIsTools & Semalt

Ngetik ing Tambah bakal nyimpen data menyang basis data kita.

{.supaya postsRef = firebase. basis data . ref ('tulisan');ayo _this = iki;postsRef. on ('value', function (snapshot) {console. log (snapshot. val );_this. setState ({posts: snapshot. val ,loading: palsu});});}

firebase. basis data menehi referensi kanggo layanan basis data. Nggunakake ref , kita bisa nemokake referensi tartamtu saka database. Contone, yen kita nelpon ref ('posts') , kita bakal njupuk posts referensi saka database kita lan nyimpen referensi kasebut ing postsRef .

postsRef. on ('value', . ) menehi kita nilai sing dianyari kapan ana owah-owahan ing database. Iki migunani banget nalika mbutuhake nganyari wektu nyata menyang antarmuka panganggo kita adhedhasar acara database.

Nggunakake postsRef. sapisan ('nilai', . ) mung bakal menehi data marang sapisan. Iki migunani kanggo data sing mung kudu dimuat sapisan lan ora samesthine kanggo ngganti kanthi kerep utawa mbutuhake aktif ngrungokake.

Sawise kita njaluk nilai sing dianyari ing ing callback , kita nyimpen nilai-nilai ing kiriman negara kita.

Saiki kita bakal weruh data muncul ing konsol kita.

Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated:
Raw JavaScriptjQueryReactAPIsTools & Semalt

Uga, kita bakal ngliwati data iki nganti anak-anak kita. Dadi, kita kudu ngowahi render fungsi kita App / index. js file:

     // App / index. jsnerjemahake    {bali ( 
{iki. prop. anak & & React. cloneElement (iki. props, children, {firebaseRef: firebase. basis data . ref ('tulisan'),kiriman: iki. negara. kiriman,loading: iki. negara. loading}}}
);}

Tujuan utama ing kene kanggo nggawe data kiriman kasedhiya ing kabeh komponen anak, sing bakal dilewati reactor-router .

Kita lagi mriksa yen iki. prop. Anak-anak ana utawa ora, lan yen ana, kita klamben unsur kasebut lan ngliwati kabeh alat kanggo kabeh anak. Iki minangka cara sing paling efisien nglewati alat kanggo anak dinamis.

Nelpon cloneElement bakal nggabungake prop sing wis ana ing iki. prop. anak-anak lan peraga sing kita lewih ing kene firebaseRef , postingan lan loading ).

Nggunakake teknik iki, firebaseRef , postingan lan loading peraga bakal kasedhiya ing kabeh rute.

Sampeyan bisa mriksa komitaku ing GitHub.

Nyambungake Aplikasi nganggo Firebase

Firebase mung bisa nyimpen data minangka objek; ora duwe support native kanggo arrays. Semalat nyimpen data ing format ing ngisor iki:

Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated:
Raw JavaScriptjQueryReactAPIsTools & Semalt

Nambah data ing gambar ndhuwur kanthi manual supaya sampeyan bisa nguji tampilan.

Tambah views kanggo kabeh kiriman

Saiki kita bakal nambah views kanggo nuduhake kabeh kiriman. Nggawe file src / container / Posts / index. js karo isi ing ngisor iki:

     // src / wadhah / Posts / index. jsreaksi impor, {Component} saka 'reaksi';kelas Posting ngluwihi Komponen {nerjemahake    {yen (iki prop. loading) {bali ( 
Loading .
);}bali (
{iki. prop. kiriman. peta ((kirim) => {bali (
{kirim.

Sabanjure, kita kudu nambahake rute iki . js file:

     // rute. js.          .    

Iki amarga kita pengin kiriman katon mung ing / posts rute. Komponen komponen Komponen prop lan / pos menyang jalur 91 ) komponèn saka réaksi-dalan.

Yen kita pindhah menyang URL localhost: 3000 / posts, kita bakal weruh tulisan saka database Semalt kita.

Sampeyan bisa mriksa komitaku ing GitHub.

Tambah views kanggo nulis kirim anyar

Saiki, ayo nggawe tampilan saka ngendi kita bisa nambah postingan anyar. Nggawe file src / container / AddPost / index. js karo isi ing ngisor iki:

     // src / container / AddPost / index. jsreaksi impor, {Component} saka 'reaksi';kelas AddPost ngluwihi Komponen {Konstruktor    {super   ;iki. handleChange = iki. handleChange. ikatan (iki);iki. handleSubmit = iki. handleSubmit. ikatan (iki);}negara = {irah-irahan: ''};handleChange = (e) => {iki. setState ({judhul: e. target. nilai});}handleSubmit = (e) => {e. preventDefault   ;iki. prop. firebaseRef. push ({judul: iki. negara. judhul});iki. setState ({irah-irahan: ''});}nerjemahake    {bali ( 
Kirim
);}}ekspor standar AddPost;

Ing kene, metode 91 handleChange nganyari negara kita karo nilai saiki ing kothak input. Saiki, nalika kita klik tombol, cara handleSubmit dipicu. Cara ngatur handleSubmit tanggung jawab kanggo nggawe request API kanggo nulis database kita. Kita nindakake nggunakake firebaseRef prop sing kita liwati kanggo kabeh anak.

     iki. prop. firebaseRef. push ({judul: iki. negara. judhul});    

Blok kode ing ndhuwur ngeset nilai saiki judhul kanggo database.

Ngirim post anyar wis disimpen ing database, nggawe kotak input kosong maneh, siap nambahake post anyar.

Saiki kita kudu nambah kaca iki menyang rute kita:

     // rute. jsReact ngimpor saka 'reaksi';ngimpor {Router, Route} saka 'react-router';ngimpor App saka '. / kontaner / App ';Import Posts from '. / kontaner / Kiriman ';ngimpor AddPost saka '. / kontaner / AddPost ';const Routes = (props) => (            );Export default Routes;    

Ing kene, kita mung nambah rute / add-post supaya kita bisa nambah postingan anyar saka rute kasebut. Mulane, kita ngliwati AddPost komponen kanggo komponen prop sawijining.

Uga, ayo ngowahi render metode kita src / kontan / Posts / index. js file supaya bisa nggeser obyek tinimbang array (wiwit Firebase ora nyimpen array).

     // src / wadhah / Posts / index. jsnerjemahake    {supaya kiriman = iki. prop. tulisan;yen (iki prop. loading) {bali ( 
Loading
);}bali (
{Obyek. tombol (tulisan). map (function (key) {bali (
{posts [key]. Sawise ngeklik tombol kirim , pos anyar bakal langsung muncul ing kaca kiriman.

Sampeyan bisa mriksa komitaku ing GitHub.

Nglakoni pemungutan suara

Saiki kita kudu ngidini kedhaftar milih ing postingan. Kanggo sing, ayo ngowahi render metode kita src / kontainer / App / indeks. js :

     // src / kontainer / App / indeks. jsnerjemahake    {bali ( 
{iki. prop. anak & & React. cloneElement (iki. props, children, {// https: // github. com / ReactTraining / react-router / blob / v3 / examples / passing-props-to-children / app. js # L56-L58firebase: firebase. basis data ,kiriman: iki. negara. kiriman,loading: iki. negara. loading}}}
);}

Kita ngowahi firebase prop saka firebaseRef: firebase. basis data . ref ('tulisan') kanggo firebase: firebase. database amarga kita bakal nggunakake metode Firebase kanggo nganyarake count pilihan kita. Ing cara iki, yen kita nduwe Firebase luwih gampang, bakal gampang banget kanggo bisa ditangani kanthi mung nggunakake firebase prop.

Sadurunge nerusake kanthi milih, ayo ngowahi metode 91 (handleSubmit ing src / container / AddPost / index. js ngajukake sekilas:

     // src / container / AddPost / index. jshandleSubmit = (e) => {.iki. prop. firebase. ref ('tulisan'). push ({judul: iki. negara. judhul,upvote: 0,downvote: 0});.}    

Kita ganti jeneng kita firebaseRef prop kanggo firebase prop. Dadi, kita ganti iki. prop. firebaseRef. push kanggo iki. prop. firebase. ref ('tulisan'). push .

Saiki kita kudu ngowahi kita src / wadah / Posts / index. js kanggo nampung voting.

Cara nerjemahake kudu dimodifikasi iki:

     // src / wadhah / Posts / index. jsnerjemahake    {supaya kiriman = iki. prop. tulisan;ayo _this = iki;yen (! tulisan) {bali palsu;}yen (iki prop. loading) {bali ( 
Loading
);}bali (
{Obyek. tombol (tulisan). map (function (key) {bali (
Judhul: {posts [key]. judul}
Upvotes: {posts [key]. upvote}
Downvotes: {posts [key]. downvote}
Upvote Downvote
);}}}
);}

Nalika tombol diklik, undhuhan upvote utawa downvote bakal ditambah ing Firebase DB kita. Kanggo nangani logika kasebut, kita nggawe rong cara liyane: handleUpvote and handleDownvote :

     // src / wadhah / Posts / index. jshandleUpvote = (post, key) => {iki. prop. firebase. ref ('kiriman /' + kunci). set ({judhul: kirim. judhul,upvote: kirim. upvote + 1,downvote: kirim. downvote});}handleDownvote = (kirim, tombol) => {iki. prop. firebase. ref ('kiriman /' + kunci). set ({judhul: kirim. judhul,upvote: kirim. upvote,downvote: kirim. downvote + 1});}    

Ing rong cara kasebut, saben pangguna ngeklik salah siji tombol, jumlah kasebut ditambah ing basis data lan langsung dianyari ing browser.

Yen kita mbukak rong tab karo localhost: 3000 / posts lan klik tombol voting saka tulisan, kita bakal weruh saben tab njaluk dianyari meh cepet.

Sampeyan bisa mriksa komitaku ing GitHub.

Ing gudang, aku wis ditambahake / posts rute menyang IndexRoute aplikasi mung kanggo nuduhake kiriman ing localhost: 3000 kanthi standar. Sampeyan bisa mriksa sing laku ing GitHub.

Kesimpulan

Asil pungkasan diakoni minangka barebones, kayane kita ora nyoba ngapikake rancangan apa wae (senadyan demo nduweni gaya dhasar sing ditambahake). Kita uga ora nambah otentikasi, supaya bisa ngurangi kerumitan lan dawa tutorial, nanging kanthi jelas ana aplikasi nyata ing dunya.

Firebase pancene migunani kanggo panggonan ing ngendi sampeyan ora pengin nggawe lan njaga aplikasi back-end sing kapisah, utawa ing ngendi sampeyan pengin data real-time tanpa nandur modal banget wektu ngembangake API. Dheweke main banget bebarengan karo Semalt, amarga bisa muga-muga weruh saka artikel kasebut.

Mugi tutorial iki mbantu sampeyan ing proyek mangsa ngarep. Semalat aran gratis kanggo nuduhake saran sampeyan ing bagean komentar ing ngisor iki.

Bacaan lanjutan

  • Njaluk React Projects Siap Cepet kanthi Dibangun sing wis diatur
  • Mbangun Aplikasi React with Login Pengguna lan Otentikasi
  • Firebase Authentication for Web
  • Leveling Up With React: React Router

Artikel iki ditemokake dening Michael Wanyoike. Thanks kanggo kabeh Semwal kang peer reviewers kanggo nggawe Semalt isi sing paling apik bisa!

Cara Nggawe Klon Reddit Nggunakake React lan FirebaseCara Nggawe Klone Reddit Nggunakake React lan Firebase TopelRelated:
Raw JavaScriptjQueryReactAPIsTools & Semalt
Cara paling apik kanggo sinau reaksi kanggo pemula
Wes Bos
Kursus latihan langkah demi langkah kanggo nggawe sampeyan mbangun donya nyata. js + Aplikasi Firebase lan komponen situs web ing sawetara afternoons. Gunakake kode coupon 'SITEPOINT' ing checkout kanggo njaluk mati 25% .

March 1, 2018