Back to Question Center
0

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаар            Reddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ? Түүхий JavaScriptjQueryReactAPIsTools & Semalt

1 answers:
React and Firebase ашиглан Reddit Clone хэрхэн үүсгэх

React нь өндөр чанартай, гүнзгий танилцуулга бол, та Канадын бүрэн стек хөгжүүлэгч Wes Bos өнгөрсөн байж чадахгүй. Энд хичээлээ оруулаад SITEPOINT ашиглан 25% off авах ба SitePoint-ийг дэмжихэд туслах болно.

Semalt бол хэрэглэгчийн интерфэйсийг бүтээх гайхалтай JavaScript сан. Create Semalt App-г хэвлэн нийтлэснээс хойш Самальт програмыг barebones гэдэг нь маш хялбар болсон.

Энэ нийтлэлд бид "Reaction App" -г ашиглан Firebase-г ашиглах болно - audemars piguet gold ice. Энэ нь хэрэглэгч саналаа өгөх шинэ холбоосыг илгээх боломжийг олгоно.

Бидний барьж байгуулах зүйлийн амьд demo.

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ?
Raw JavaScriptjQueryReactAPIsTools & Semalt

Яагаад гал гарч байна вэ?

Функцыг ашиглах нь хэрэглэгчдэд бодит цагийн мэдээллийг харуулах боломжийг бидэнд олгоно. Хэрэглэгч холбоос дээр санал өгсний дараа хариу нь агшин зуур болно. Firebase-ийн бодит цагийн мэдээллийн сан энэ боломжийг ашиглахад бидэнд туслах болно. Мөн Reeb application -ийг Firebase-тай хэрхэн эхлүүлэх талаар ойлгоход бидэнд туслах болно.

Яагаад яагаад урвуулж байна вэ?

Semalt нь бүрэлдэхүүн хэсгийн архитектурыг ашиглан хэрэглэгчийн интерфэйсийг үүсгэхэд ашиглагддаг. Бүрэлдэхүүн хэсэг бүр дотоод төлөвийг агуулж эсвэл таяг болгон таяг болгон өгч болно. Улс, тулгуур нь Semalt дахь хамгийн чухал хоёр үзэл баримтлал юм. Эдгээр хоёр зүйл нь бидний хэрэглээний төлөвийг цаг хугацаанд нь тодорхойлоход тусалдаг. Хэрэв та эдгээр нэр томъёог мэдэхгүй бол эхлээд Semalt docs руу очно уу.

Тэмдэглэл: Та бас Semalt эсвэл MobX мэтийн төрийн контейнерыг ашиглаж болно, гэхдээ энгийн байдлаар бид энэ зааварт зориулж ашиглахгүй.

Гишүүнээр бүх төслийг GitHub дээрээс авах боломжтой.

Зөвлөмж Курс

Төсөлийг зохион байгуулах

Төслийн бүтэц, шаардлагатай хамааралтай зүйлсийг бий болгох алхмуудаар явдаг.

Бүтээгдхүүнийг үүсгэх програм суулгах

Хэрэв та өмнө нь байхгүй бол та 11-р create-react-app -ийг суулгах хэрэгтэй. Үүнийг хийхийн тулд та өөрийн терминал дээр дараахийг бичиж болно:

     npm install -g create-react-апп ашиглана уу    

Хэрэв та үүнийг дэлхий даяар суулгасны дараа, та ямар ч хавтсан дотор Semalt төсөл шатыг ашиглах нь үүнийг ашиглаж болно.

Одоо шинэ апп бий болгоод үүнийг reddit-clone гэж нэрлэе.

     үүсгэх-хариу-app reddit-clone    

Энэ нь reddit-clone фолдер дотор үүсгэх-хариу урвалт програм төслийг дарах болно. Эхлэн ачаалагдаж эхлүүлэлт хийгдсэний дараа бид reddit-clone директор дотор орж хөгжүүлэлтийн сервер рүү орж болно:

     npm эхлэх    

Энэ үед та http: // localhost: 3000 / рүү очиж, аппликейшн араг ясыг дээшлүүлж ажиллуулаарай.

Аппликейшнийг бүтээх

Засвар үйлчилгээ хийхийн тулд би чингэлэг болон бүрэлдэхүүн хэсгүүдийг салгахдаа үргэлж дуртай байдаг. Савнууд нь бидний хэрэглээний бизнесийн логикийг багтаасан ухаалаг бүрэлдэхүүн бөгөөд Ajax хүсэлтийг удирдах юм. Бүрэлдэхүүн хэсгүүд нь ердөө л дүлий танилцуулах хэсгүүд юм. Тэдгээр бүрэлдэхүүн хэсгийн логикийг хянахад ашиглаж болох өөрийн дотоод төлөвтэй байж болно (жишээ нь: хяналттай оролтын бүрэлдэхүүн хэсгийн өнөөгийн төлөвийг харуулах).

Шаардлагагүй лого болон CSS файлуудыг устгасны дараа, энэ нь таны апп одоо харагдах болно. Бид бүрэлдэхүүн хэсгүүд фолдер болон контейнер хавтас үүсгэсэн. Бид шилжих Апп. js дотор контейнер / Апп хавтас дотроо registerServiceWorker үүсгэнэ. js тушаалууд фолдер дотор байгаа. png "alt ="Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ? Raw JavaScriptjQueryReactAPIsTools & Semalt "/>

Таны src / контейнер / Апп / индекс. js файл иймэрхүү харагдах ёстой:

   // src / контейнер / апп / индекс. jsимпортыг урвуу, 'урвалд' оруулах;анги Апп нь Бүрэлдэхүүн хэсэг {render    {буцах (
Сайн уу
);}}экспортын үндсэн апп;

Таны src / index. js файл иймэрхүү харагдах ёстой:

   // src / index. jsимпорт 'урвал' -аас хариу урвалд;импортлох ReactDOM 'урвалд-дом' -оос;Импортын апп-аас '. / контейнер / апп ';import registerServiceWorker '. / utils / registerServiceWorker ';ReactDOM. render (, document getElementById ('root'));registerServiceWorker   ;    

Өөрийн хөтөч дээрээ очиж, хэрэв бүх зүйл зүгээр ажилладаг бол, та Hello World дэлгэцийг харах болно.

Та GitHub дээр миний амлалтыг шалгаж болно.

Хариулагч чиглүүлэгч нэмэх

Semalt-чиглүүлэгч нь бидний апп-д зориулсан маршрутыг тодорхойлоход тусална. Энэ нь маш их өөрчлөгдөж, Semalt экосистемд маш ихээр нэрлэгддэг.

Бид хариу протокол -ийн 3. 0. 0 хувилбарыг ашиглах болно.

     npm суулгах - урвалд чиглэсэн чиглүүлэгч @ 3. 0. 0    

Одоо шинэ файл чиглүүлэлтүүдийг нэм. src хавтас дотор дараах кодтой js :

   // чиглэлүүд. jsимпорт 'урвал' -аас хариу урвалд;import {чиглүүлэгч, замыг} репорт чиглүүлэгчээс;Импортын апп-аас '. / контейнер / апп ';const Routes = (тулгуур) => (<Чиглүүлэгч { props}><Чиглэл path = "/" component = {App}>);экспортын үндсэн замууд;    

Чиглүүлэгч бүрэлдэхүүн нь бүх Чиглүүлэлт хэсгүүдийг оруулдаг. Замын чиглэл тулгуур тулгуур дээр тулгуурлан, хуудасны бүрэлдэхүүн хэсэг тулгуур хэсэг рүү дамжуулагдсан бүрэлдэхүүнийг үзүүлнэ. Энд бид / командыг App бүрэлдэхүүнийг ачаалахын тулд Router бүрэлдэхүүнийг ашиглана.

   <Чиглүүлэгч { props}><Чиглэл path = "/" component = {
Hello World!
}>

Дээрх код нь хүчинтэй байна. Зам / ,

Сайн уу!
холбох болно.

Одоо бид чиглүүлэлтээ дуудах хэрэгтэй. бидний src / index-ээс js файл. js файл. Файл нь дараах агуулгатай байх ёстой:

   // src / index. jsимпорт 'урвал' -аас хариу урвалд;импортлох ReactDOM 'урвалд-дом' -оос;import {browserHistory} 'урвалд чиглүүлэгчээс';Импортын апп-аас '. / контейнер / апп ';импортоос гарах замууд '. / замууд ";import registerServiceWorker '. / utils / registerServiceWorker ';ReactDOM. render (<Замын түүх = {browserHistory} />баримт бичиг. getElementById ('root'));registerServiceWorker   ;    

Үндсэндээ, бид чиглүүлэгчдээс Router бүрэлдэхүүн хэсгийг холбож байна. js файл. Бид түүхийг түүхийг тийш нь дамжуулдаг тул замын маршрут түүхийг хэрхэн хянах талаар мэдэх болно.

Та GitHub дээр миний амлалтыг шалгаж болно.

Файлын систем нэмэх

Хэрэв танд Файлын данс байхгүй бол, одоо өөрийн вэбсайт руу орох замаар (одоо үнэгүй) үүсгээрэй. Шинэ акаунт үүсгэсний дараа таны акаунт руу нэвтэрч консол дээр очоод дээр дарж project нэмнэ үү.

Төслийнхээ нэрийг оруулна уу reddit-clone руу утасдана, өөрийн орныг сонгож, project товчийг дар.

Одоо бид эхлэхээсээ өмнө дүрмүүд -ийг мэдээллийн баазад зориулж өөрчлөх хэрэгтэй. Учир нь анхдагчаар Файрбасс өгөгдлийг унших, бичих боломжтой байхаар баталгаажуулахыг хэрэглэгч хүсэж байна. Хэрэв та өөрийн төслийг сонгож, зүүн талд байрлах Database tab дээр дарвал, та мэдээллийн баазаа үзэх боломжтой болно. унш ":" auth! = null ","бичих": "auth! = null"}}

Үүнийг дараах байдлаар өөрчлөх хэрэгтэй:

   {"дүрэм": {"унших": "auth === null","бичих": "auth === null"}}    

Энэ нь хэрэглэгч нэвтэрч орохгүйгээр мэдээллийн баазыг шинэчлэх боломжийг олгох болно. Хэрэв бид өгөгдлийн санд шинэчлэлт хийхээсээ өмнө нэвтрэлт танилт хийсэн бол бид Firebase-аас өгсөн үндсэн дүрмүүд хэрэгтэй болно. Энэ програмыг хялбар байлгахын тулд бид таньж баталгаажуулахгүй байх болно .

Чухал: Хэрэв та энэ өөрчлөлтийг хийхгүй бол Semalt нь таны апп-с мэдээллийн санг шинэчлэхийг зөвшөөрөхгүй.

Одоо флэш npm модулийг манай апп-д дараах кодыг ажиллуулснаар нэмье:

     npm - г суулгах файлын түгээгүүрийг суулгаарай    

Дараа нь, энэ модулийг App / индекс дээрээ импортло. js файл:

   // Апп / индекс. jsимпортыг * флэшээр "галладаг";    

Firebase руу нэвтэрсний дараа бидний төслийг сонгоход, бид сонголтоо авах болно Файлын түгээлтийг өөрийн веб апп руу нэмнэ .

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ?
Raw JavaScriptjQueryReactAPIsTools & Semalt

Хэрэв бид дээрх сонголт дээр дарвал, бидний componentWillMount аргыг ашиглах 91 config хувьсагчийг бидэнд харуулах болно.

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ?
Raw JavaScriptjQueryReactAPIsTools & Semalt

Файлын тохиргооны файлын файлыг үүсгэе. Бид энэ файлыг файлын -бохир тохируулгыг нэрлэнэ. js бөгөөд энэ нь манай аппыг Флэшээр холбоход шаардагдах бүх тохируулгыг агуулна:

   // App / firebase-config. jsэкспортын үндсэн {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"};    

Бид өөрсдийн Firebase тохиргоог App / индекс руу оруулж өгөх болно. js :

   // Апп / индекс. jsimport config ". / firebase-config ';    

Firebase мэдээллийн баазын холболтыг байгуулагч -д эхлүүлэх болно.

   // Апп / индекс. jsconstructor    {мундаг  ;// Функцийг эхлүүлэхфункц. initializeApp (config);}    
lifillycle hook componentWillMount lifecycle hook дээр бид initializeApp аргыг суулгаж, config 56) хувьсагчтай. Энэ объект бидний апп-ын бүх өгөгдлийг агуулсан. initializeApp арга нь бидний програмыг манай Firebase мэдээллийн санд холбож өгөгдөл унших, бичих боломжтой болно.

Бидний тохиргоо зөв эсэхийг шалгахын тулд Firebase руу зарим өгөгдлийг нэмэх. Өгөгдлийн сан руу очоод дараах бүтцийг мэдээллийн санд оруулна уу:

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ?
Raw JavaScriptjQueryReactAPIsTools & Semalt

Нэмэх Add нь өгөгдлийг манай мэдээллийн санд хадгалах болно.

{.postsRef = firebase. өгөгдлийн сан . ref ('бичлэгүүд');let _this = энэ;postsRef. on ('утга', функц (snapshot) {консол. log (snapshot.val );_this. setState ({бичлэгүүд: snapshot. val ,Ачаа: хуурамч});});}

галт бөмбөг. Өгөгдлийн сан нь өгөгдлийн сангийн үйлчилгээний лавлагаа өгдөг. Бид ref -ийг ашиглахдаа бид мэдээллийн баазаас тусгай лавлагаа авч болно. Жишээ нь, бид ref ('posts') руу залгахад бид бичлэгүүд лавлагаа өгөгдлийн сангаас авч, postsRef

postsRef. ('үнэ цэнэтэй', . ) нь өгөгдлийн санд ямар нэгэн өөрчлөлт гарсан үед шинэчлэгдсэн утгыг бидэнд өгдөг. Энэ нь бидэнд хэрэглэгчийн интерфэйсд өгөгдлийн сангийн үйл ажиллагаанууд дээр тулгуурлан бодит цагийн шинэчлэл хийхэд маш хэрэгтэй байдаг.

postsRef-ийг ашиглах. Нэг удаа ('утга', . ) зөвхөн нэг өгөгдлийг өгдөг. Энэ нь зөвхөн нэг удаа дуудагдах ёстой бөгөөд байнга өөрчлөгдөх эсвэл идэвхтэй сонсохыг шаарддаггүй өгөгдөлд хэрэгтэй.

Бид дуудлага дээр шинэчилсэн утгыг авсны дараа бид posts төлөв дэх утгуудыг хадгалдаг.

Одоо бид консол дээр гарч байгаа өгөгдлийг харах болно.

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ?
Raw JavaScriptjQueryReactAPIsTools & Semalt

Мөн бид энэ өгөгдлийг хүүхдүүддээ хүргэх болно. Тиймээс, бид App / индекс render функцыг өөрчлөх хэрэгтэй. js файл:

   // Апп / индекс. jsrender    {буцах (
{энэ. тулгуур. хүүхдүүд & & React. cloneElement (энэ тулгуур таяг, хүүхдүүд, {firebaseRef: firebase. өгөгдлийн сан . ref ('бичлэгүүд'),бичлэгүүд: энэ. төлөв. бичлэгүүд,Ачаалал: энэ. төлөв. ачих})}
);}

Энд гол зорилго нь реактор-чиглүүлэгч -аар дамжуулагдах бүх хүүхдүүдийн бүрэлдэхүүн хэсгүүдийн бичлэгийн өгөгдлийг боломжтой болгох явдал юм.

Бид энэ эсэхийг шалгаж байна. тулгуур. Хүүхэд байгаа эсэх, хэрэв байгаа бол бид тэр элементийг хуулж, бүх тулгуурыг манай хүүхдүүдэд дамжуулдаг. Энэ нь динамик хүүхдийн таяг дамжуулах маш үр дүнтэй арга юм.

CloneElement дуудах нь -д байгаа аль хэдийн тулгуурыг аль алиныг нь нийлүүлэх болно. тулгуур. Хүүхдүүд , энд таягнууд галт зэвсэг , бичлэгүүд ба ачаалалт

Энэ техникийг ашиглахад firebaseRef , posts and loading тулгуурууд бүх чиглүүлэгт бэлэн болно.

Та GitHub дээр миний амлалтыг шалгаж болно.

Функцийг холбох нь

Функционал зөвхөн өгөгдлийг объект гэж хадгалах боломжтой; Энэ нь массивт зориулсан ямар ч эх сурвалж байхгүй байна. Өгөгдлийг дараах форматаар хадгалах боломжтой.

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ?
Raw JavaScriptjQueryReactAPIsTools & Semalt

Гараар дэлгэцэн дээр байгаа өгөгдлийг нэмэхийн тулд та өөрийн үзэл бодлыг тест хийж чадна.

Бүх бичлэгийн үзэмж нэмэх

Одоо бид бүх бичлэгүүдийг үзүүлэхийн тулд үзэл бодлоо нэмэх болно. Файл src / контейнер / Бичлэгүүд / индекс үүсгэ. js дараах агуулгатай:

   // src / контейнер / Бичлэг / индекс. jsимпортыг урвуу, 'урвалд' оруулах;анги Бичвэрүүд нь Бүрэлдэхүүн хэсэг {render    {(энэ нь тулгуур. ачих) {буцах (
Ачаалж байна .
);}буцах (
{энэ. тулгуур. нийтлэлүүд. газрын зураг ((шуудан) => {буцах (
{шуудан.

Дараа нь бид үүнийг чиглүүлэгт нэмэх хэрэгтэй. js файл:

   // чиглэлүүд. js.<Чиглүүлэгч { props}><Чиглэл path = "/" component = {App}><Чиглүүлэлтийн зам = "/ posts" component = {Бичлэгүүд} />.    

Энэ нь зөвхөн бичлэгүүд / posts чиглүүлэлт дээр харуулахыг хүсдэг учраас учраас. Тиймээс бид 91 хэсэг хэсгийг бүрэлдэхүүн хэсэг тулгуур ба / posts зам ) чиглүүлэгч-чиглүүлэгчийн бүрэлдэхүүн хэсэг.

Хэрэв бид вэбсайт руу очвол: 3000 / posts, бид Semalt мэдээллийн баазаас харах болно.

Та GitHub дээр миний амлалтыг шалгаж болно.

Шинэ бичлэг бичих боломжийг нэмэх

Одоо бид шинэ бичлэг нэмж болох байршлыг харцгаая. File src / контейнер / AddPost / index үүсгэнэ. js дараах агуулгатай:

   // src / контейнер / AddPost / index. jsимпортыг урвуу, 'урвалд' оруулах;class AddPost нь Бүрэлдэхүүн хэсэг {constructor    {мундаг  ;энэ нь. handleHange = энэ. бариул. холбох (энэ);энэ нь. handleSubmit = энэ. handleSubmit. холбох (энэ);}state = {гарчиг: ''};handleChange = (e) => {энэ нь. setState ({гарчиг: e. зорилтот. утга});}handleSubmit = (e) => {д. preventDefault   ;энэ нь. тулгуур. firebaseRef. түлхэх({гарчиг: энэ төлөв. нэр});энэ нь. setState ({гарчиг: ''});}render    {буцах (
<товчtype = "submit"onClick = {энэ. handleSubmit}>Илгээх
);}}экспортын анхдагч AddPost;

Энд handleChange method нь бидний төлөвийг оролтын нүдэнд байгаа утгыг шинэчилнэ. Одоо бид товчлуур дээр дарахад handleSubmit аргыг ашиглах болно. handleSubmit арга нь API хүсэлтийг бидний мэдээллийн санд бичихийг шаарддаг. Үүнийг бид firebaseRef тулгуурыг ашиглан бүх хүүхдэд дамжуулсан.

   энэ. тулгуур. firebaseRef. түлхэх({гарчиг: энэ төлөв. нэр});    

Дээрх кодын блок нь гарчгийн өнөөгийн үнэ цэнийг манай мэдээллийн санд байршуулдаг.

Шинэ бичлэгийг мэдээллийн баазад хадгалдаг тул бид оролтын хайрцагыг хоосон дахин хийж, шинэ бичлэг хийхэд бэлэн боллоо.

Одоо бид энэ замыг манай замд нэмж оруулах хэрэгтэй:

   // чиглэлүүд. jsимпорт 'урвал' -аас хариу урвалд;import {чиглүүлэгч, замыг} репорт чиглүүлэгчээс;Импортын апп-аас '. / контейнер / апп ';импортын бичлэгүүдээс '. / савнууд / Бичлэгүүд ';импортоос AddPost '. / контейнер / AddPost ';const Routes = (тулгуур) => (<Чиглүүлэгч { props}><Чиглэл path = "/" component = {App}><Чиглүүлэлтийн зам = "/ posts" component = {Бичлэгүүд} /><Чиглүүлэлтийн зам = "/ add-post" component = {AddPost} />);экспортын үндсэн замууд;    

Энд бид / add-post замыг нэмж тэрхүү замаас шинэ бичлэг нэмж оруулж болно. Тиймээс бид AddPost компонентийг бүрэлдэхүүн хэсгийн тулгууртай нь дамжуулсан.

Мөн бидний src / контейнер / Бичлэгүүд / индекс render аргыг өөрчлөх хэрэгтэй. js файлын оронд обьектууд дээр обьектууд дээр давталт хийж болох юм (Файрбазар нь массивыг хадгалдаггүй).

   // src / контейнер / Бичлэг / индекс. jsrender    {бичлэгүүд = энэ. тулгуур. бичлэгүүд;(энэ нь тулгуур. ачих) {буцах (
Ачаалж байна
);}буцах (
{ Обьект. түлхүүрүүд (нийтлэлүүд). газрын зураг (функц (түлхүүр) {буцах (
{шуудан [түлхүүр]. дээр дарж товчийг дарснаар шинэ бичлэг шуудангийн хуудсанд гарч ирнэ.

Та GitHub дээр миний амлалтыг шалгаж болно.

Саналаа хэрэгжүүлэх

Одоо бид хэрэглэгчдэд шуудан дээр санал өгөхийг зөвшөөрөх хэрэгтэй. Үүнийг хийхийн тулд бидний src / контейнер / Апп / индекс render аргыг өөрчлөх хэрэгтэй. js :

   // src / контейнер / апп / индекс. jsrender    {буцах (
{энэ. тулгуур. хүүхдүүд & & React. cloneElement (энэ тулгуур таяг, хүүхдүүд, {// https: // github. com / ReactTraining / урвал чиглүүлэгч / blob / v3 / жишээ / дамжих-тулгуураас-хүүхэд / апп. js # L56-L58Галаар: firebase. мэдээллийн сан ,бичлэгүүд: энэ. төлөв. бичлэгүүд,Ачаалал: энэ. төлөв. ачих})}
);}

гал асаах тулгуурыг firebaseRef: firebase-аас өөрчилсөн. өгөгдлийн сан . ref ('posts') to галт гал: firebase. Өгөгдлийн сан нь бидний санал тоолохоо шинэчлэхийн тулд Firebase's set аргыг ашиглах болно. Ийм байдлаар хэрэв бид илүү их Firebase refs байгаа бол зөвхөн флэш тулгуурыг ашиглан тэдгээрийг зохицуулахад бидэнд амархан байх болно.

Сонгох үйл явцыг эхлэхээс өмнө handleSubmit method src / контейнер / AddPost / index дээр өөрчлөх хэрэгтэй. js нь жаахан файлыг ажиллуулдаг:

   // src / контейнер / AddPost / index. jshandleSubmit = (e) => {.энэ нь. тулгуур. функц. ref ('бичлэгүүд'). түлхэх({гарчиг: энэ төлөв. нэр,upvote: 0,downvote: 0});.}    

Бид өөрсдийн firebaseRef тулгуур флэш тулгуурыг нэрээ өөрчилсөн. Тиймээс бид үүнийг өөрчлөх болно. тулгуур. firebaseRef. Үүнийг -ээс түлхэх. тулгуур. функц. ref ('бичлэгүүд'). түлхэх .

Одоо бид src / контейнер / Бичлэг / индексийг өөрчлөх хэрэгтэй. js файлыг сонгох боломжтой.

render аргыг дараах байдлаар өөрчлөх хэрэгтэй:

   // src / контейнер / Бичлэг / индекс. jsrender    {бичлэгүүд = энэ. тулгуур. бичлэгүүд;let _this = энэ;if (! posts) {худал буцаана;}(энэ нь тулгуур. ачих) {буцах (
Ачаалж байна
);}буцах (
{ Обьект. түлхүүрүүд (нийтлэлүүд). газрын зураг (функц (түлхүүр) {буцах (
Гарчиг: {posts [key]. нэр}
Дээшлүүд: {posts [key]. upvote}
Уруудах: {posts [key]. downvote}
<товчonClick = {_this. handleUpvote. холбох (энэ бичлэг, түлхүүр [түлхүүр], түлхүүр)}type = "button">Upvote<товчonClick = {_this. handleDownvote. холбох (энэ бичлэг, түлхүүр [түлхүүр], түлхүүр)}type = "button">Downvote
);})}
);}

Товчлууруудыг товшсон үед upvote эсвэл downvote тоог бидний Firebase DB-д нэмэгдэнэ. Логикийг удирдахын тулд бид хоёр аргыг бий болгодог: handleUpvote ба handleDownvote :

   // src / контейнер / Бичлэг / индекс. jshandleUpvote = (шуудан, түлхүүр) => {энэ нь. тулгуур. функц. ref ('posts /' + key). set ({гарчиг: шуудан. нэр,upvote: шуудан. upvote + 1,downvote: нийтлэл. downvote});}handleDownvote = (шуудан, түлхүүр) => {энэ нь. тулгуур. функц. ref ('posts /' + key). set ({гарчиг: шуудан. нэр,upvote: шуудан. upvote,downvote: нийтлэл. downvote + 1});}    

Эдгээр хоёр арганд хэрэглэгчид товчлууруудын аль нэг дээр товшиход тухайн тооллогын өгөгдлийн санд нэмэгдэн, хөтөч дээр даруй шинэчлэгддэг.

Хэрэв бид localhost-тай хоёр цонх нээнэ: 3000 / posts болон сэтгүүлийн нийтлэлүүд дээр товшсон товчлуурууд дээр дарвал бид таблетууд бүр даруй шинэчлэгдэх болно.

Та GitHub дээр миний амлалтыг шалгаж болно.

Нөөцлүүрт би 91 / posts route IndexRoute руу нэмсэн байх ёстой бөгөөд анхдагчаар локалhosthost дээр харуулав. Та GitHub дээр хийх комментаа шалгаж болно.

Дүгнэлт

Төгсгөлийн үр дүн нь арай бага barebones байсан, учир нь бид ямар ч загварыг хэрэгжүүлэхийг оролдож байсангүй (хэдийгээр Демо үндсэн хэдэн загвар нэмэгдсэн байна). Мөн бид зааварчилгааны нарийн төвөгтэй байдал болон хугацааг багасгахын тулд ямар нэгэн баталгаажилтыг нэмж оруулаагүй боловч мэдээжийн хэрэг дэлхий ертөнц ямар нэгэн програм шаарддаг.

Функц нь тусдаа арын хэрэглээний програмыг үүсгэх, хадгалахыг хүсдэггүй газрууд, эсвэл та өөрийн API-г хөгжүүлэхэд хэт их цаг хугацаа зарцуулахгүйгээр бодит цагийн мэдээллийг хүсч байгаа газруудад үнэхээр хэрэгтэй. Энэ нь Semtalt-тэй маш сайн тоглодог.

Энэ заавар танд ирээдүйн төслүүдэд тань тусална гэж найдаж байна. Semalt таны санал хүсэлтийг доорх тайлбар хэсэгт хуваана уу.

Цааш унших

  • Төслүүдийг дахин эхлүүлэхийн тулд бэлэн болсон түргэн шуурхай төслүүдийг сэргээх
  • Хэрэглэгчийн нэвтрэх ба баталгаажуулалтаар Reaction Application үүсгэх
  • Вэбсайт дахь Firebase баталгаажуулалт
  • Урвуу үйлдлийг давтах: Чиглүүлэгчийг холбох

Энэ нийтлэлийг Майкл Уанноикоор хянуулсан байна. Semtalt-ийн бүх сурвалжлагчдад баярлалаа.

Reddit Clone ашиглан React болон Firebase ашиглан хэрхэн үүсгэх талаарReddit Clone хэрхэн реактор, галыг ашиглан хэрхэн үүсгэх вэ?
Raw JavaScriptjQueryReactAPIsTools & Semalt
Шинэхэн суралцах хамгийн сайн арга зам
Wes Bos
Бодит ертөнцийг бүтээхэд чиглэсэн алхам алхмаар сургалт явдаг. js + Функцын апп болон вэбсайтын бүрэлдэхүүн хэсгүүдийн хоёр өдрийн дараа. Купоны код 'SITEPOINT' -ийг татаж авахдаа унтраах 25% авах.

March 1, 2018