摘要:用定義視圖組件在中,視圖組件是被使用定義的。你的組件可以有任何你想要的方法。組件可以接收來自于父組件通過屬性傳過來的數據。因為本教程專注于和,所以你可以拷貝下面的代碼到文件中。嘿嘿,來添加上吧只要把改名成就好了
在 React 組件中定義視圖
在開始編寫React視圖庫之前,要先添加react包,這個包囊括了你在Meteor應用中開始運行React所需要所有東西。這個React庫自己可以自動將jsx文件編譯,并且通過ReactMeteorData的mixin加載數據。我們將會在接下來的步驟中看到如何使用所有的這些東西。
打開一個新的終端,在你運行Meteor程序相同的文件夾下運行這樣一條命令:
meteor add react替換啟動代碼
為了啟動,我們來替換掉默認的啟動應用的代碼,接下來我們會討論這是什么意思
首先,替換掉最開始的名為simple-todos-react.html的HTML文件內容。
Todo List
然后, 刪除simple-todos-react.js并建立三個新的文件
新建 simple-todos-react.jsx文件寫入這些內容
if (Meteor.isClient) { // 下面的代碼最會在客戶端運行 Meteor.startup(function () { // 在頁面加載完成之后,使用 Meteor.startup 來渲染 React 組件 React.render(, document.getElementById("render-target")); }); }
新建App.jsx文件,并寫入以下內容:
// 不要在App前面添加 var App = React.createClass({ getTasks() { return [ { _id: 1, text: "This is task 1" }, { _id: 2, text: "This is task 2" }, { _id: 3, text: "This is task 3" } ]; }, renderTasks() { return this.getTasks().map((task) => { return; }); }, render() { return ( ); } });Todo List
{this.renderTasks()}
新建Task.jsx文件,并寫入
// Task 組件 - 表示單個的待做事宜 Task = React.createClass({ propTypes: { // 這個組件從React的prop中接受task并顯示 // 我們使用propTypes來表示這個屬性是必須的 task: React.PropTypes.object.isRequired }, render() { return (
我們剛剛在應用中添加的三個事情分別是以下的意思:
一個 App React組件
一個 Task React組件
一些包裹在 if (Meteor.isClient) { ... } 中的代碼, 這些代碼定義了在瀏覽器中會被執行,還有Meteor.startup, 這個讓程序知道頁面在被加載完成之后如何去調用代碼。
在教程之后,我們會在添加和修改代碼的時候參考這些組件
看看結果在我們的瀏覽器中,應用將會看起來像這個樣子:
Todo List
This is task1
This is task2
This is task3
如果你的應用看起來并不是這樣,請確認你的代碼和例子上的一致
HTML文件中定義靜態內容Meteor將你的應用中的HTML文件切分并識別三個最高等級的標簽:, ,還有
每個在
標簽中的標簽被添加到已被發送的HTML文件的head部分,標簽中的所有標簽同樣是被添加到已被發送的HTML的body部分,就像正常的html文件一樣每一個在中的標簽將會被編譯成Meteor模板文件, 那些可以被包含在HTML中,包含{{>templateName}}或者是在js中引用的Template.templateName。在本教程中,我們并不會使用這些Meteor特性,因為我們將會用React定義所有的這些視圖組件。
用React定義視圖組件在React中,視圖組件是被使用React.createClass定義的。你的組件可以有任何你想要的方法。除了幾個像是render這樣的特殊方法。組件可以接收來自于父組件通過props屬性傳過來的數據。在這個教程中,我們將看一看更多的一些React特性。你也可以通過Facebook"s React tutorial來學習
從JSX的render方法中得到標記語言(markup)在React組件中最重要的方法就是render, 這個被React調用從應該被顯示的HTML中返回內容(description),HTML內容被叫做JSX的javascript的擴展語言所編寫。這是一種像是在javascript中寫HTML的樣子。你早就看出了一些明顯的不同了吧:在JSX中,你使用className屬性代替class,關于JSX一個重要的事情就是它(JSX)并不是一種像是Spacebars或是Angular的模板語言 -- 它被直接編譯成常規的JavaScript文件。了解更多請看React docs
JSX文件可以使用ES2015的新特性如果你現在還沒有嘗試過下一代JavaScript特性,一些代碼片段可能看起來有點怪異。這是因為.jsx文件會隨著react包被編譯,同時包含一些通用的ES2015特性,即下一代JavaScript。這些特性包含了以下的:
箭頭函數:
(arg) => {return result;}
方法名簡化:
render() {...}
使用const和let替換var
你可以閱讀ecmascript README來了解Meteor所支持的特性。想要更多關于 ECMAScript 2015 的知識可以看看下面的幾個文章:
Luke Hoban"s "ES6 features"
Kyle Simpson"s "You don"t know JS: ES6 and beyond"
Nikolas C. Zakas "Understanding ECMAScript 6"
阮一峰ES6入門
添加樣式在我們做更多的未來打算之前,先來添加一些CSS來讓我們的頁面好看一點兒吧。
因為本教程專注于HTML和JavaScript,所以你可以拷貝下面的代碼到simple-todos.css文件中。這是你直到本教程結束都會用到的所有CSS代碼。這個應用沒有這些CSS也能運行,但是你添加了這些CSS會更好看一點。
/* CSS 聲明在這里 */ body { font-family: sans-serif; background-color: #315481; background-image: linear-gradient(to bottom, #315481, #918e82 100%); background-attachment: fixed; position: absolute; top: 0; bottom: 0; left: 0; right: 0; padding: 0; margin: 0; font-size: 14px; } .container { max-width: 600px; margin: 0 auto; min-height: 100%; background: white; } header { background: #d2edf4; background-image: linear-gradient(to bottom, #d0edf5, #e1e5f0 100%); padding: 20px 15px 15px 15px; position: relative; } #login-buttons { display: block; } h1 { font-size: 1.5em; margin: 0; margin-bottom: 10px; display: inline-block; margin-right: 1em; } form { margin-top: 10px; margin-bottom: -10px; position: relative; } .new-task input { box-sizing: border-box; padding: 10px 0; background: transparent; border: none; width: 100%; padding-right: 80px; font-size: 1em; } .new-task input:focus{ outline: 0; } ul { margin: 0; padding: 0; background: white; } .delete { float: right; font-weight: bold; background: none; font-size: 1em; border: none; position: relative; } li { position: relative; list-style: none; padding: 15px; border-bottom: #eee solid 1px; } li .text { margin-left: 10px; } li.checked { color: #888; } li.checked .text { text-decoration: line-through; } li.private { background: #eee; border-color: #ffffd; } header .hide-completed { float: right; } .toggle-private { margin-left: 5px; } @media (max-width: 600px) { li { padding: 12px 15px; } .search { width: 150px; clear: both; } .new-task input { padding-bottom: 5px; } }
現在,你已經添加了這些CSS,這款應用應該看起來會更好一點了。切換到你的瀏覽器看看新的樣式并確認其有沒有加載成功吧~
添加Sass(可選)我知道你肯定想耍Sass。嘿嘿,來添加上sass吧
meteor add fourseven:scss
只要把simple-todos-react.css改名成simple-todos-react.scss就好了
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/86050.html
摘要:為了開啟這套賬戶系統和界面,我們需要去添加相關的包。使用,而不是在文件加入開始這段代碼只會在客戶端執行加入結束添加用戶關聯功能現在你已經可以創建賬戶并登錄你的應用程序了。例如包含了已登陸用戶的用戶名。 添加多用戶賬戶 Meteor帶來了一套賬戶系統然后順便還帶了用戶界面來讓你可以在幾分鐘之內在你的應用中添加多用戶功能 目前,這套UI組件使用Blaze作為默認的UI引擎,在未來,可能會以...
摘要:數據存儲集合是存儲持久化數據的方式。中的集合比較特殊的是,它可以從服務端,包括客戶端接收數據。它也可以自動的自我更新,因此一個視圖組件受到一個集合的支持,他可以自動的展示最新的數據。 數據存儲 集合(Collection)是Meteor存儲持久化數據的方式。Meteor 中的集合比較特殊的是,它可以從服務端,包括客戶端接收數據。這使得編寫視圖邏輯變得更加簡單 -- 不用去寫太多的服務端...
摘要:通過發布訂閱模式過濾數據現在我們已經把應用中比較敏感的代碼放到了一些方法里面,我們還需要學習安全故事的另一半內容了。當在客戶端被調用時傳入發布器名稱,客戶端將會從發布器訂閱所有的數據。這個按鈕應該只是給任務的所有者來顯示。 通過發布訂閱模式過濾數據 現在我們已經把應用中比較敏感的代碼放到了一些方法里面,我們還需要學習Meteor安全故事的另一半內容了。到現在為止,我們一直是假設整個整個...
摘要:通過表單添加任務在這個步驟,我們將為用戶在列表上添加輸入框。在中,這是一種監聽瀏覽器事件的方式,就像是在表單上有提交事件一樣。這對一個任務列表來說并不是非常好。在下一步,我們將給待辦事宜的列表添加一個非常重要的功能已完成功能和刪除功能 通過表單(form)添加任務 在這個步驟,我們將為用戶在列表上添加輸入框。 首先,在App.jsx文件中App組件上添加表單吧。 Tod...
摘要:組件有一個名叫狀態的特殊變量。將會異步地更新狀態屬性,然后讓組件重新渲染。使其可以在為時,過濾我們已完成的任務。因為我們已經有數據在客戶端的里了,所以添加額外的總數并不會向服務器再次申請數據。 在組件狀態中存儲臨時數據 在這個步驟,我們會在為應用的客戶端添加數據過濾特性,這樣用戶就可以通過點擊’確認選框‘來查看當前進行的任務。我們會去學習如何僅在客戶端使用React組件狀態來存儲臨時模...
閱讀 1840·2021-11-23 09:51
閱讀 1294·2021-11-18 10:02
閱讀 971·2021-10-25 09:44
閱讀 2109·2019-08-26 18:36
閱讀 1630·2019-08-26 12:17
閱讀 1154·2019-08-26 11:59
閱讀 2752·2019-08-23 15:56
閱讀 3363·2019-08-23 15:05