Back to Question Center
0

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법            React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 : 원시 자바 스크립트 결과 앱 도구 도구 & 세미 퉁어

1 answers:
React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법

React에 대한 고품질의 심층적 인 소개는 캐나다의 전체 스택 개발자 인 Wes Bos를 넘을 수 없습니다. 그의 코스를 여기서 시도하고 코드 SITEPOINT 를 사용하여 25 % 할인 하고 SitePoint 지원을 돕습니다.

Semalt는 사용자 인터페이스를 구축하기위한 훌륭한 JavaScript 라이브러리입니다. Semalt App 만들기가 출판 된 이래, barebones Semalt 응용 프로그램을 비계하는 것은 매우 쉬워졌습니다 - fascinators for church.

이 기사에서는 Semalt와 비슷한 기능을하는 앱을 빌드하기 위해 React Create App과 함께 Firebase를 사용할 것이다. 사용자가 투표 할 수있는 새 링크를 제출할 수 있습니다.

우리가 무엇을 지을 지 살짝 데모해라.

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 :
원시 JavaScript jQueryReactAPIs 도구 및 Semalt

왜 Firebase인가?

Firebase를 사용하면 우리가 실시간 데이터를 사용자에게 보여주기가 매우 쉽습니다. 사용자가 링크에 투표하면 피드백이 즉시 나타납니다. Firebase의 실시간 데이터베이스는이 기능을 개발하는 데 도움이 될 것입니다. 또한 Firebase로 React 애플리케이션을 부트 스트랩하는 방법을 이해하는 데 도움이 될 것입니다.

왜 반응 하는가?

Semalt는 특히 컴포넌트 아키텍처를 사용하여 사용자 인터페이스를 생성하는 것으로 알려져 있습니다. 각 구성 요소는 내부 상태를 포함하거나 데이터를 전달할 수 있습니다. 주와 소품은 Semalt의 가장 중요한 두 개념입니다. 이 두 가지 사항은 어느 시점에서든 우리 애플리케이션의 상태를 결정하는 데 도움이됩니다. 이 조건에 익숙하지 않은 경우 먼저 Semalt 문서로 넘어가십시오.

참고 : Semalt 또는 MobX와 같은 상태 컨테이너를 사용할 수도 있지만, 간단하게하기 위해이 튜토리얼에서는 사용하지 않을 것입니다.

전체 프로젝트는 GitHub에서 사용할 수 있습니다.

추천 코스

프로젝트 설정

프로젝트 구조와 필요한 종속성을 설정하는 단계를 거치며 간략히 살펴보십시오.

create-react-app

설치하기

아직 설치하지 않았다면 create-react-app 를 설치해야합니다. 이렇게하려면 터미널에 다음을 입력 할 수 있습니다.

     npm install -g create-react-app    

전역 적으로 설치 한 후에는이 폴더를 사용하여 모든 폴더 내의 Semalt 프로젝트를 비계 할 수 있습니다.

이제 새로운 앱을 만들어서 reddit-clone 이라고 부르 자.

     create-react-app reddit-clone    

이것은 reddit-clone 폴더 안에 새로운 create-react-app 프로젝트를 비계합니다. 부트 스트랩이 끝나면 reddit-clone 디렉토리에 들어가서 개발 서버를 시작합니다.

     npm start    

이 시점에서 http : // localhost : 3000 /로 이동하여 앱 뼈대가 실행되고 실행되는지 확인할 수 있습니다.

앱 구성

유지 보수를 위해 항상 용기 구성 요소 를 분리하고 싶습니다. 컨테이너는 애플리케이션의 비즈니스 로직을 포함하고 Ajax 요청을 관리하는 스마트 컴포넌트입니다. 구성 요소는 단순히 멍청한 프레젠테이션 구성 요소입니다. 그것들은 그 구성 요소의 논리를 제어하는데 사용될 수있는 (예를 들어, 제어 된 입력 구성 요소의 현재 상태를 보여주는) 자신의 내부 상태를 가질 수있다.

불필요한 로고 및 CSS 파일을 제거한 후 이제 앱을보아야합니다. 구성 요소 폴더와 컨테이너 폴더를 만들었습니다. App을 움직여 보자. containers / App 폴더에있는 js 를 호출하고 registerServiceWorker를 만듭니다 . utils 폴더 안에있는 js . png "alt ="React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 : 원시 JavaScript jQueryReactAPIs 도구 및 Semalt "/>

귀하의 src / containers / App / index. js 파일은 다음과 같아야합니다.

     // src / containers / App / index. jsimport React, {Component}에서 'react';class App extends Component {render    {돌아온 ( 
안녕하세요 세계
);}}기본 앱을 내 보냅니다.

귀하의 src / index. js 파일은 다음과 같아야합니다.

     // src / index. js수입 '반응'에서 반응;ReactDOM을 'react-dom'에서 가져옵니다.'에서 앱 가져 오기' / containers / App ';registerServiceWorker from '을 (를) 가져 오십시오. / utils / registerServiceWorker ';ReactDOM. render (, document. getElementById ( 'root')));registerServiceWorker   ;    

브라우저로 가서 모든 것이 잘 작동하면 Hello World 가 화면에 표시됩니다.

GitHub에서 내 커밋을 확인할 수 있습니다.

반응 라우터 추가

Semalt-router는 앱의 경로를 정의하는 데 도움이 될 것입니다. Semalt 생태계에서 매우 맞춤화되고 매우 인기가 있습니다.

우리는 반응 라우터 의 버전 3. 0 0 을 사용할 것입니다.

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

이제 새 파일 경로를 추가하십시오. 다음 코드와 함께 src 폴더 안의 js

     // 라우트. js수입 '반응'에서 반응;'react-router'에서 {Router, Route}를 가져 오십시오.'에서 앱 가져 오기' / containers / App ';const Routes = (props) => (<라우터 { 소품}<경로 경로 = "/"구성 요소 = {앱}    );기본 경로를 내 보냅니다.    

라우터 구성 요소는 모든 Route 구성 요소를 래핑합니다. Route 구성 요소의 경로 기반을 기반으로하여 구성 요소 prop에 전달 된 구성 요소가 페이지에 렌더링됩니다. 여기서는 라우터 구성 요소를 사용하여 App 구성 요소를로드하기위한 루트 URL ( / )을 설정합니다.

     <라우터 { 소품}<경로 경로 = "/"구성 요소 = { 
Hello World!
}>

위의 코드도 유효합니다. 경로 / 의 경우,

Hello World!
가 장착됩니다.

이제 우리는 경로를 호출해야합니다. js 파일을 우리의 src / index에서 가져온다. js 파일. 파일의 내용은 다음과 같습니다.

     // src / index. js수입 '반응'에서 반응;ReactDOM을 'react-dom'에서 가져옵니다.'react-router'에서 {browserHistory}를 가져 오십시오.'에서 앱 가져 오기' / containers / App ';에서 경로 가져 오기 '를 선택하십시오. / routes ';registerServiceWorker from '을 (를) 가져 오십시오. / utils / registerServiceWorker ';ReactDOM. 세우다( <경로 기록 = {browserHistory} /> ,문서. getElementById ( 'root'));registerServiceWorker   ;    

기본적으로 우리는 라우터 구성 요소를 우리의 루트에서 마운트하고 있습니다. js 파일. 우리는 경로가 역사 추적을 처리하는 방법을 알 수 있도록 역사 를 전달합니다.

GitHub에서 내 커밋을 확인할 수 있습니다.

파이어베이스 추가하기

Firebase 계정이 없다면, 자신의 웹 사이트로 가서 계정을 만드십시오 (무료입니다!). 새 계정을 만들면 계정에 로그인하고 콘솔 페이지로 이동하여 프로젝트 추가 를 클릭하십시오.

프로젝트의 이름을 입력하고 (광산 reddit-clone 이라고 부름) 국가를 선택하고 프로젝트 생성 버튼을 클릭하십시오.

기본적으로 Firebase는 사용자가 데이터를 읽고 쓸 수 있다고 인증되기 때문에 데이터베이스의 규칙 을 변경해야합니다. 프로젝트를 선택하고 왼쪽의 데이터베이스 탭을 클릭하면 데이터베이스를 볼 수 있습니다. 읽기 ":"auth! = null ",". write": "auth! = null"}}

이것을 다음과 같이 변경해야한다 :

     {"규칙": {". read": "auth === null",". write": "auth === null"}}    

이것은 사용자가 로그인하지 않고 데이터베이스를 업데이트 할 수있게합니다. 데이터베이스를 업데이트하기 전에 인증을받은 흐름을 구현 한 경우 Firebase에서 제공하는 기본 규칙이 필요합니다. 이 애플리케이션을 단순하게 유지하기 위해 우리 는 인증을하지 않을 것입니다 .

중요 :이 수정을하지 않으면 Semalt가 앱에서 데이터베이스를 업데이트 할 수 없게됩니다.

이제 다음 코드를 실행하여 firebase npm 모듈을 앱에 추가해 보겠습니다.

     npm install --save firebase    

그런 다음 App / index에 해당 모듈을 가져옵니다. js 파일로 저장 :

     // App / index. js"firebase"에서 firebase로 가져 오기 *;    

Firebase에 로그인 한 후 프로젝트를 선택하면, 웹 어플리케이션에 Firebase 추가 옵션이 생깁니다.

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 :
원시 JavaScript jQueryReactAPIs 도구 및 Semalt

그 옵션을 클릭하면 componentWillMount 메소드에서 사용할 config 변수를 보여주는 모달이 나타납니다.

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 :
원시 JavaScript jQueryReactAPIs 도구 및 Semalt

Firebase 설정 파일을 만들어 봅시다. 이 파일 을 firebase-config라고 부르겠다. js 이고, 우리의 앱을 Firebase에 연결하는데 필요한 모든 설정을 담고 있습니다 :

     // 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 / index로 가져옵니다. js :

     // App / index. js에서 구성 가져 오기 '. / firebase-config ';    

생성자 에서 Firebase 데이터베이스 연결을 초기화합니다.

     // App / index. js생성자    {감독자  ;// Firebase 초기화하기중포 기지. initializeApp (config);}    
componentWillMount 라이프 사이클 후크에서 우리는 방금 설치 한 패키지 firebase 를 사용하여 initializeApp 메소드를 호출하고 config 56) 변수가 포함되어 있습니다. 이 개체는 앱에 대한 모든 데이터를 포함합니다. initializeApp 메소드는 우리의 어플리케이션을 Firebase 데이터베이스에 연결하여 데이터를 읽고 쓸 수있게합니다.

Firebase에 데이터를 추가하여 구성이 올바른지 확인하십시오. 데이터베이스 탭으로 이동하여 데이터베이스에 다음 구조를 추가하십시오.

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 :
원시 JavaScript jQueryReactAPIs 도구 및 Semalt

Add 를 클릭하면 데이터베이스에 데이터가 저장됩니다.

{.postsRef = firebase를 보자. 데이터 베이스 . ref ( 'posts');_this = this;postsRef. on ( 'value', 함수 (스냅 샷) {콘솔. log (스냅 샷 .val );_이. setState ({posts : 스냅 샷. val ,로드 중 : false});});}

firebase. database 는 데이터베이스 서비스에 대한 참조를 제공합니다. ref 를 사용하여 데이터베이스에서 특정 참조를 얻을 수 있습니다. 예를 들어 ref ( 'posts') 를 호출하면 데이터베이스에서 91 개의 게시물 참조를 가져 와서 해당 참조를 postsRef 에 저장합니다.

postsRef. on ( 'value', . ) 은 데이터베이스에 변경 사항이있을 때마다 업데이트 된 값을 제공합니다. 이것은 모든 데이터베이스 이벤트를 기반으로 사용자 인터페이스에 대한 실시간 업데이트가 필요할 때 매우 유용합니다.

postsRef를 사용하여 . 한 번 ( '값', . ) 은 데이터를 한 번만 제공합니다. 이는 한 번만로드해야하며 자주 변경하거나 능동적으로 듣기를 요구하지 않는 데이터에 유용합니다.

on 콜백에서 업데이트 된 값을 얻은 후 우리는 posts 상태에 값을 저장합니다.

이제 콘솔에 나타나는 데이터를 볼 수 있습니다.

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 :
원시 JavaScript jQueryReactAPIs 도구 및 Semalt

또한이 데이터를 자녀에게 전달할 것입니다. 따라서 App / index의 render 기능을 수정해야합니다. js 파일 :

     // App / index. jsrender    {돌아온 ( 
{이. 소품. 아이들 && React. cloneElement (this. props. children, {firebaseRef : firebase. 데이터 베이스 . ref ( 'posts'),게시물 :이. 상태. 게시물,로드 :이. 상태. 로딩}}}
);}

여기에서의 주된 목적은 게시물 데이터를 모든 어린이 구성 요소에서 사용할 수있게하는 것이며, 이는 반응 라우터 를 통과합니다 .

우리는 이것을 확인하고 있습니다. 소품. 어린이 는 존재하거나 존재하지 않으며, 존재한다면 우리는 그 요소를 복제하고 모든 소품을 모든 어린이에게 전 달합니다. 이것은 소품을 역동적 인 어린이에게 전달하는 매우 효율적인 방법입니다.

cloneElement를 호출하면 에서 이미 존재하는 소품을 얕게 병합합니다. 소품. 아이들 과 여기에서 통과 한 소도구 firebaseRef , posts and loading ).

이 기술을 사용하여 firebaseRef , 기둥 선적 소품을 모든 경로에서 사용할 수 있습니다.

GitHub에서 내 커밋을 확인할 수 있습니다.

응용 프로그램과 Firebase 연결하기

Firebase는 데이터를 객체로만 저장할 수 있습니다. 배열에 대한 기본 지원이 없습니다. 다음 형식으로 데이터를 저장하십시오 :

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 :
원시 JavaScript jQueryReactAPIs 도구 및 Semalt

보기를 테스트 할 수 있도록 수동으로 위의 스크린 샷에 데이터를 추가하십시오.

모든 게시물에 대한보기 추가

이제 모든 게시물을 보여주기위한보기를 추가 할 것입니다. 파일 src / containers / Posts / index를 만듭니다. js 에 다음 내용이 포함되어 있습니다.

     // src / containers / Posts / index. jsimport React, {Component}에서 'react';클래스 게시물 확장 컴포넌트 {render    {if (this. props. loading) {돌아온 ( 
로드 중 .
);}돌아온 (
{ 이. 소품. 게시물. 지도 ((게시) => {돌아온 (
{ 게시하다.

다음으로 우리는 이것을 경로에 추가해야합니다. js 파일 :

     // 라우트. js.<라우터 { 소품}<경로 경로 = "/"구성 요소 = {앱} <경로 경로 = "/ posts"구성 요소 = {게시물} />     .    

이것은 게시물이 / posts 경로에만 표시되기를 원하기 때문입니다. 그래서 우리는 Route 요소의 요소 prop 경로 prop에 / posts ) 구성 요소를 포함합니다.

URL localhost : 3000 / posts로 이동하면 Semalt 데이터베이스의 게시물을 볼 수 있습니다.

GitHub에서 내 커밋을 확인할 수 있습니다.

새 게시물을 쓸보기 추가

이제 새로운 글을 추가 할 수있는 뷰를 만들어 보겠습니다. 파일 src / containers / AddPost / index를 만듭니다. js 에 다음 내용이 포함되어 있습니다.

     // src / containers / AddPost / index. jsimport React, {Component}에서 'react';클래스 AddPost extends Component {생성자    {감독자  ;이. handleChange = this. handleChange. 바인드 (this);이. handleSubmit = this. handleSubmit. 바인드 (this);}상태 = {제목 : ''};handleChange = (e) => {이. setState ({제목 : e. 목표. 값});}handleSubmit = (e) => {이자형. preventDefault   ;이. 소품. firebaseRef. 푸시({제목 :이. 상태. 표제});이. setState ({제목 : ''});}render    {돌아온 ( 
<입력type = "텍스트"자리 표시 자 = "게시물 제목 쓰기"onChange = {이. handleChange}값 = {this. 상태. 제목}/> <버튼type = "submit"onClick = {this. handleSubmit}> 제출
);}}기본 AddPost를 내 보냅니다.

여기에서 handleChange 메서드는 입력 상자에 표시된 값으로 상태를 업데이트합니다. 이제 버튼을 클릭하면 handleSubmit 메서드가 트리거됩니다. handleSubmit 메소드는 API에 데이터베이스에 대한 쓰기 요청을하는 역할을합니다. 우리는 firebaseRef 소책자를 사용하여 모든 아이들에게 전달했습니다.

     이것. 소품. firebaseRef. 푸시({제목 :이. 상태. 표제});    

위 코드 블록은 현재 데이터베이스의 제목 값을 설정합니다.

새 게시물이 데이터베이스에 저장 되었으면 입력 상자를 다시 비워서 새 게시물을 추가 할 준비를합니다.

이제이 페이지를 경로에 추가해야합니다 :

     // 라우트. js수입 '반응'에서 반응;'react-router'에서 {Router, Route}를 가져 오십시오.'에서 앱 가져 오기' / containers / App ';에서 게시물 가져 오기 '. / containers / Posts ';'에서 AddPost 가져 오기. / containers / AddPost ';const Routes = (props) => (<라우터 { 소품}<경로 경로 = "/"구성 요소 = {앱} <경로 경로 = "/ posts"구성 요소 = {게시물} />  <경로 경로 = "/ add-post"구성 요소 = {AddPost} />     );기본 경로를 내 보냅니다.    

여기서 / add-post 경로를 추가하여 해당 경로에서 새 게시물을 추가 할 수 있습니다. 따라서 AddPost 구성 요소를 구성 요소 소품에 전달했습니다.

또한, src / containers / Posts / index의 render 메소드를 수정 해 봅시다. js 파일을 복사하여 배열 대신 객체를 반복 할 수 있도록합니다 (Firebase는 배열을 저장하지 않으므로).

     // src / containers / Posts / index. jsrender    {posts = this를 보자. 소품. 게시물;if (this. props. loading) {돌아온 ( 
로드 중입니다
);}돌아온 (
{Object. 키 (게시물). map (function (key) {돌아온 (
{posts [키]. 제출 버튼을 클릭하면 새 게시물이 게시물 페이지에 즉시 나타납니다.

GitHub에서 내 커밋을 확인할 수 있습니다.

투표 구현

이제 사용자가 게시물에 투표 할 수 있도록해야합니다. 이를 위해 src / containers / App / index의 render 메소드를 수정 해 보겠습니다. js :

     // src / containers / App / index. jsrender    {돌아온 ( 
{이. 소품. 아이들 && React. cloneElement (this. props. children, {// https : // github. co.kr / ReactTraining / react-router / blob / v3 / examples / pass-props-to-children / app. js # L56-L58firebase : firebase. 데이터 베이스 ,게시물 :이. 상태. 게시물,로드 :이. 상태. 로딩}}}
);}

firebaseRef : firebase에서 firebase 소품을 변경했습니다. 데이터 베이스 . ref ( 'posts') ~ firebase : firebase. firebase set 메서드를 사용하여 투표 수를 업데이트하므로 database 를 참조하십시오. 이런 식으로, Firebase refs가 더 있다면, firebase 소품 만 사용하여 그들을 처리하는 것은 매우 쉽습니다.

투표를 진행하기 전에 우리의 src / containers / AddPost / index에서 handleSubmit 메소드를 수정 해 봅시다. js 파일 조금 :

     // src / containers / AddPost / index. jshandleSubmit = (e) => {.이. 소품. 중포 기지. ref ( 'posts'). 푸시({제목 :이. 상태. 표제,upvote : 0,downvote : 0});.}    

우리는 firebaseRef 소품의 이름을 firebase 소품으로 변경했습니다. 그래서 우리는 이것을 바꿉니다. 소품. firebaseRef. 에서 을 누릅니다. 소품. 중포 기지. ref ( 'posts'). 푸시 .

이제 src / containers / Posts / index를 수정해야합니다. js 파일에 저장됩니다.

render 메소드는 다음과 같이 수정되어야한다.

     // src / containers / Posts / index. jsrender    {posts = this를 보자. 소품. 게시물;_this = this;if (! posts) {false를 반환;}if (this. props. loading) {돌아온 ( 
로드 중입니다
);}돌아온 (
{Object. 키 (게시물). map (function (key) {돌아온 (
Title : {posts [key]. 제목}
Upvotes : {posts [키]. upvote}
Downvotes : {posts [키]. downvote}
<버튼onClick = {_이. handleUpvote. bind (this, posts [key], key)}유형 = "버튼"> Upvote <버튼onClick = {_이. handleDownvote. bind (this, posts [key], key)}유형 = "버튼"> 다운 다운
);}}}
);}

버튼을 클릭하면 Firebase DB에서 upvote 또는 downvote 카운트가 증가합니다. 그 논리를 다루기 위해 우리는 두 개의 메소드를 추가로 생성한다 : handleUpvote and handleDownvote :

     // src / containers / Posts / index. jshandleUpvote = (게시, 키) => {이. 소품. 중포 기지. ref ( 'posts /'+ key). 세트({제목 : 게시물. 표제,upvote : 게시물. upvote + 1,downvote : 게시물. downvote});}handleDownvote = (게시, 키) => {이. 소품. 중포 기지. ref ( 'posts /'+ key). 세트({제목 : 게시물. 표제,upvote : 게시물. upvote,downvote : 게시물. downvote + 1});}    

이 두 가지 방법에서 사용자가 단추 중 하나를 클릭 할 때마다 데이터베이스에서 해당 개수가 증가하고 브라우저에서 즉시 업데이트됩니다.

localhost : 3000 / posts로 두 개의 탭을 열고 게시물의 투표 단추를 클릭하면 각 탭이 거의 즉시 업데이트됩니다.

GitHub에서 내 커밋을 확인할 수 있습니다.

저장소에서 기본적으로 localhost : 3000에 게시물을 표시하기 위해 응용 프로그램의 IndexRoute / posts 경로를 추가했습니다. GitHub에서 커밋을 확인할 수 있습니다.

결론

데모에 몇 가지 기본 스타일이 추가되었지만 디자인을 구현하지 않으므로 최종 결과는 약간 베어 본 것입니다. 또한 튜토리얼의 복잡성과 길이를 줄이기 위해 인증을 추가하지는 않았지만 실제로 모든 실제 애플리케이션에서 필요합니다.

Firebase는 별도의 백엔드 애플리케이션을 생성하고 유지하기를 원하지 않는 곳이나 API 개발에 너무 많은 시간을 투자하지 않고 실시간 데이터를 원할 때 유용합니다. Semalt와 정말 잘 어울립니다. 기사에서 볼 수 있듯이.

이 튜토리얼이 당신의 미래 프로젝트에 도움이되기를 바랍니다. 의견을 보내 주시면 의견을 나누실 수 있습니다.

추가 읽기

  • 사전 구성된 빌드로 빠른 반응 프로젝트 얻기
  • 사용자 로그인 및 인증을 통한 반응 애플리케이션 구축
  • 웹용 파이어베이스 인증
  • 레벨 업 : React Router

이 기사는 Michael Wanyoike가 심사숙고했다. Semalt 콘텐츠 제작에 대한 Semalt의 동료 평가자 모두에게 감사합니다.

React와 Firebase를 사용하여 Reddit 복제본을 만드는 방법React와 FirebaseRelated 토픽을 사용하여 Reddit Clone을 생성하는 방법 :
원시 JavaScript jQueryReactAPIs 도구 및 Semalt
초보자를위한 최고의 학습 방법
웨스 보스
실제 세계를 만들기위한 단계별 교육 과정 React. 오후 2시에 js + Firebase 앱과 웹 사이트 구성 요소를 제공합니다. 계산대에서 쿠폰 코드 'SITEPOINT' 를 사용하여 25 % 할인 하십시오.

March 1, 2018