譯者按: 一家叫GeekyAnts的印度公司開發了Vue Native,基於React Native實現。html
爲了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原做者全部,翻譯僅用於學習。前端
儘管整個JavaScript社區對Vue的情感是比較微妙的(不懂爲啥),但也不能阻止我嘗試用Vue Native來開發移動App。vue
這是一個很簡單的例子,僅僅將「Hello World」在頁面上展現出來。react
做爲一個前端開發,我很喜歡HTML的簡潔。直接編寫代碼,輔以CSS來定製樣式。Vue的.vue文件提供了相似的體驗。git
Vue有豐富的功能:支持模板化、樣式定義、基於Vuex的狀態管理和路由。這使得它不失爲一個完美的選擇。github
使用Vue Native,咱們在開發中也有着相似的體驗。vue-router
在網上簡單的搜索,就能夠發現SmallComfort開發的react-vue項目。react-vue
將Vue文件翻譯到React和React Native組件。感謝react-vue的做者解決了不少問題。 Vue Native是一樣的。vuex
Vue Native依賴React Native。當你使用vue-native-cli
初始化一個新的app,入口文件是App.vue
。npm
就像.js
文件同樣,你能夠用不少.vue
文件來組合一個.vue
文件。實際上,全部的.vue文件到翻譯到以.js後綴的React Native組件。若是想了解更多,請參考此處。小程序
Vue Native一樣支持使用v-model
來作數據雙向綁定。
<template> <text-input v-model=」name」 /> </template> <script> export default { data: function() { return { name: "John Doe" }; } }; </script>
你可使用v-for
指令來寫循環,和JavaScript的map相似。
<template> <view> <text v-for=」name in names」 v-bind:key="name">{{name}}</text> </view> </template> <script> export default { data: function() { return { names: [「Gaurav」, 「Neeraj」, 「Sanket」, 「Neeraj」] }; } }; </script>
咱們使用Vue Native重寫了KitchenSink應用,你能夠去這裏下載源碼:GeekyAnts/KitchenSink-Vue-Native。
咱們GeekyAnts的高級軟件工程師Ankit Singhania使用Vue Native寫了一個簡單的ToDo應用。
爲了使用Vue Native,你首先須要安裝React Native。根據這裏的步驟來安裝。
下一步,使用npm安裝Vue Native CLI。
npm install -g vue-native-cli
以後,你就能夠初始化一個Vue-Native項目了:
vue-native init <projectName> cd <projectName>
你能夠直接使用npm run
來在IOS/Andriod模擬器上運行這個Vue Native應用了。
在Vue中,指令是能夠說是一種特殊的屬性,他們都以v-
做爲前綴。下面是幾個經常使用的指令。
v-if
和v-else
用來編寫條件語句。
<template> <view class="container"> <view class="btn-container"> <button title="show A" :on-press="() => handleBtnClick('A')"/> <button title="show B" :on-press="() => handleBtnClick('B')"/> <button title="show C" :on-press="() => handleBtnClick('C')"/> </view> <view> <text v-if="type === 'A'"> A </text> <text v-else-if="type === 'B'"> B </text> <text v-else-if="type === 'C'"> C </text> <text v-else> Not A/B/C </text> </view> </view> </template>
執行結果以下:
v-for
相似於JavaScript的map。
<template> <view class="container"> <text class="text-container" v-for="todo in todos" :key="todo.text" > {{ todo.text }} </text> </view> </template> <script> export default { data: function() { return { todos: [ { text: "Learn JavaScript" }, { text: "Learn Vue" }, { text: "Build something awesome" } ] }; } }; </script>
執行結果以下:
v-model
指令用來建立一個雙向綁定的元素,能夠基於一個input元素或則一個組件。它內部是將value和onChangeText綁定到React Native的TextInput。
<template> <view class="container"> <text-input class="text-input-container" placeholder="Type here" v-model="textContent" /> <text class="text-container" > {{textContent}} </text> </view> </template> <script> export default { data: function() { return { textContent: "" }; } }; </script>
上面的代碼對textContent
作了雙向綁定,若是在text-input輸入內容,它會被存儲到textContent
中,而後會直接顯示到text-input
的下方。
執行結果以下:
Vue Native使用vue-router
來實現導航邏輯。咱們來看看下面的實現:
你可使用Vuex來管理狀態,詳情查看:Vuex。
咱們已經使用Vue Native將整個KitchenSink重寫,你能夠在生產環境使用它。不過你要記得它有侷限性。
Vue-Native是徹底開源的,能夠在Github找到源代碼:vue-native-core。
Fundebug專一於JavaScript、微信小程序、微信小遊戲、支付寶小程序、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了10億+錯誤事件,付費客戶有Google、360、金山軟件、百姓網等衆多品牌企業。歡迎你們免費試用!
轉載時請註明做者Fundebug以及本文地址: https://blog.fundebug.com/2018/07/23/vue-native/