學習 React.js:用 Node 和 React.js 創建一個實時的 Twitter 流
Build A Real-Time Twitter Stream with Node and React.js By Ken Wheeler (@ken_wheeler) #簡介 歡迎來到學習 React 的第二章,該系列文章將集中在怎麼熟練並且有效的使用臉書的 React 庫上。如果你沒有看過第一章,概念和起步,我非常建議你繼續看下去之前,回去看看。 今天我們準備創建用 React 來創建一個應用,通過 Isomorphic Javascript。 Iso-啥? Isomorphic. Javascript. 意思是說一份代碼在服務端和客戶端都可以跑。 這個概念被用在許多框架上,比如 Rendr,Meteor & Derby。你用 React 同樣也能實現,今天現在我們就開始來學。 ##為什麼那麽神奇? 我跟很多人一樣,都是 Angular 粉,不過有一個痛點是在處理 SEO 的時候非常麻煩。 不過我覺得 Google 應該會執行並且給 Javascript 做索引吧? 哦哈,肯定沒有啦。他們只是給你提供處理靜態 HTML 的機會。你還是要用 PhantomJS 或者其他第三方服務來生成 HTML 的。 那麽來看 React。 React 在客戶端很厲害,不過它可以在服務端渲染這就很不一樣了。這是因為 React 用了虛擬 DOM 來代替真的那個,並且允許我們渲染我們的組件。 #開始 好吧屌絲們,讓我們把真傢伙掏出來吧。我們將構建一個英勇,它可以顯示這篇文章的推,並且可以實時加載。下面是一些需求:
下面是我們的效果圖。請去看看實際的 Demo ,確認我們的所有東西都是實時顯示的。 讓我們來看看除了 React 之外還要用到的一些工具:
##服務端 讓我們開始構建我們應用的服務端。從這裏下載工程文件,然後跟著下面做: 目錄結構 <!-- lang: js --> components/ // React Components Directory ---- Loader.react.js // Loader Component ---- NotificationBar.react.js // Notification Bar Component ---- Tweet.react.js // Single Tweet Component ---- Tweets.react.js // Tweets Component ---- TweetsApp.react.js // Main App Component models/ // Mongoose Models Directory ---- Tweet.js // Our Mongoose Tweet Model public/ // Static Files Directory ---- css ---- js ---- svg utils/ ----streamHandler.js // Utility method for handling Twitter stream callbacks views/ // Server Side Handlebars Views ----layouts -------- main.handlebars ---- home.handlebars app.js // Client side main config.js // App configuration package.json routes.js // Route definitions server.js // Server side main PACKAGE.JSON <!-- lang: js --> { "name": "react-isomorph","version": "0.0.0","description": "Isomorphic React Example","main": "app.js","scripts": { "watch": "watchify app.js -o public/js/bundle.js -v","browserify": "browserify app.js | uglifyjs > public/js/bundle.js","build": "npm run browserify ","start": "npm run watch & nodemon server.js" },"author": "Ken Wheeler","license": "MIT","dependencies": { "express": "~4.9.7","express-handlebars": "~1.1.0","mongoose": "^3.8.17","node-jsx": "~0.11.0","ntwitter": "^0.5.0","react": "~0.11.2","socket.io": "^1.1.0" },"devDependencies": { "browserify": "~6.0.3","nodemon": "^1.2.1","reactify": "~0.14.0","uglify-js": "~2.4.15","watchify": "~2.0.0" },"browserify": { "transform": [ "reactify" ] } } 如果上面的你都做了,只要簡單的執行一下 現在我們有一些可以用到的命令:
|