详解Vue Native
译者按: 一家叫GeekyAnts的印度公司开发了Vue Native,基于React Native实现。
- 原文: Introducing Vue Native
- 译者: Fundebug
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。
尽管整个JavaScript社区对Vue的情感是比较微妙的(不懂为啥),但也不能阻止我尝试用Vue Native来开发移动App。
Hello World
这是一个很简单的例子,仅仅将“Hello World”在页面上展示出来。
动机
作为一个前端开发,我很喜欢HTML的简洁。直接编写代码,辅以CSS来定制样式。Vue的.vue文件提供了类似的体验。
Vue有丰富的功能:支持模板化、样式定义、基于Vuex的状态管理和路由。这使得它不失为一个完美的选择。
使用Vue Native,我们在开发中也有着类似的体验。
初次尝试
在网上简单的搜索,就可以发现SmallComfort开发的react-vue项目。react-vue
将Vue文件翻译到React和React Native组件。感谢react-vue的作者解决了很多问题。 Vue Native是同样的。
Vue Native编译到React Native
Vue Native依赖React Native。当你使用vue-native-cli
初始化一个新的app,入口文件是App.vue
。
就像.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>
App示例
KitchenSink应用
我们使用Vue Native重写了KitchenSink应用,你可以去这里下载源码:GeekyAnts/KitchenSink-Vue-Native。
Todo应用
我们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
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
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
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 Native使用vue-router
来实现导航逻辑。我们来看看下面的实现:
使用Vuex做状态管理
你可以使用Vuex来管理状态,详情查看:Vuex。
局限性和已知问题
- 有时候对于一个组件,你需要创建一个返回JSX代码的函数;比如在FlatList中的renderItem函数就必须返回JSX。
- 报错是在React Native层面的,并没有映射到Vue Native代码。我们正在优化这个问题。
可以用在生产环境吗?
我们已经使用Vue Native将整个KitchenSink重写,你可以在生产环境使用它。不过你要记得它有局限性。
Vue-Native是完全开源的,可以在Github找到源代码:vue-native-core。
关于Fundebug
Fundebug专注于JavaScript、微信小程序、微信小游戏、支付宝小程序、React Native、Node.js和Java线上应用实时BUG监控。 自从2016年双十一正式上线,Fundebug累计处理了10亿+错误事件,付费客户有Google、360、金山软件、百姓网等众多品牌企业。
版权声明
转载时请注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2018/07/23/vue-native/
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
从零开始学抓取
从零开始学抓取 昨天突然遇到了一个需要统计某个网站所有页面单词数的任务,于是从零开始学起python搞抓取。 看了一下资料,需要用到下面几个库: beautifulsoup4(分析html) lxml(html praser) requests(请求页面) xlwt(导出excel表格) 下面是代码 import requests from bs4 import BeautifulSoup import lxml import re url = "http://www.baidu.com" homepage = requests.get(url).text #检查返回页面的内容 #print (homepage) soup = BeautifulSoup(homepage,'lxml') for linkpage in soup.find_all('a'): linkpage2 = linkpage.get('href') #检查有哪些连接 #print(linkpage.get('href')) if linkpage2.startswith(url): #正则表达式删除末尾的锚位 ...
- 下一篇
如何本地安装ApiPost接口调试工具
ApiPost简介: ApiPost是一个支持团队协作,并可直接生成文档的API调试、管理工具。它支持模拟POST、GET、PUT等常见请求,是后台接口开发者或前端、接口测试人员不可多得的工具 。 下载地址: https://www.apipost.cn/#download 如何安装ApiPost 的Chrome拓展: 如果您选择安装ApiPost的window或者Mac客户端,您就可以直接关闭本文了。 因为ApiPost客户端不需要安装chrome拓展就能使用。 本文主要讲在谷歌应用商店不能访问(不可描述的原因)的情况下,如何安装apipost拓展。 1、官网下载chrome拓展并解压 2、打开谷歌浏览器,点击右上角三个点-更多工具-拓展程序 进入拓展程序管理页码。如图 3、右上角打开开发者模式,然后点击 加载已解压的拓展程序,选择刚刚解压的apitpost拓展文件夹即可。如图 4、出现图中界面即为安装成功
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G