基于Redux的ReactNative项目开发总结(一)
来源:互联网 发布:算法 专利 编辑:程序博客网 时间:2024/05/21 21:33
http://blog.csdn.net/u011413061/article/details/51694158
写在前面
上周把基于
Redux
的单页应用开发完 紧接着就开始了ReactNative
的开发。真的快得不可思议,只花了一周时间,我们两个人就分工把APP也开发完了,并且同时兼容IOS
操作系统和Android
操作系统。内部测试了一轮,流畅性和用户体验方面也都相当给力! 接下去几篇依次介绍项目开发中领悟的技巧和遇到的坑。
项目架构
和React
开发的单页应用不同,ReactNative
开发不需要依赖webpack
,facebook
已经提供的一套基于NodeJS
的转换和运行工具,这里不多做介绍。项目的架构如下:
<code class="hljs axapta has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">|---- project |---- android <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// android外壳 </span> |---- ios <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ios外壳</span> |---- node_modules <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 项目依赖的node模块</span> |---- app <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 本项目的js代码</span> |---- actions <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Redux的actions</span> |---- assets <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 项目使用的icon</span> |---- components <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 项目自定义的组件</span> |---- containers <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 项目的容器页面</span> |---- mixins <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 全局使用的工具方法</span> |---- modules <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 全局使用的自定义模块 </span> |---- reducers <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Redux的reducers</span> |---- configureStore.js <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// Redux的store配置</span> |---- <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.js <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// APP入口页面</span> |---- <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.ios.js <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// android入口</span> |---- <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.android.js <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// ios入口</span> |---- packge.json <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 项目包信息</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li></ul>
对
Redux
不清楚的童鞋可以出门看我之前的《基于Redux的单页应用开发总结》 。其实除了路由,其他和单页应用的结构差别不大。
依赖的Node模块
ReactNative
开发离不开NodeJS
的支持,相比单页应用,这里依赖的模块比较少,除了Redux
相关的模块,其他都是项目中用到的三方组件。
<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"dependencies"</span>: { <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"@remobile/react-native-toast"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^1.0.4"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 用于错误提示的小弹窗</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"base-64"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^0.1.0"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^0.14.8"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-native"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^0.25.1"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-native-animatable"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^0.6.0"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 动画库</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-native-communications"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^2.0.0"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 调用手机通讯功能</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-native-image-picker"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^0.18.17"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 图片选择</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-native-modalbox"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^1.3.3"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 模态框</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-native-tab-navigator"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^0.2.18"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 导航栏</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-native-viewpager"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^0.2.1"</span>, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 图片轮播切换</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react-redux"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^4.4.5"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"redux"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^3.5.2"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"redux-thunk"</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"^2.0.1"</span> }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>
错误提示
App里错误提示和网站稍有不同,网站页面宽度大,错误提示信息一般出现在输入框的后面或者悬浮在右上角。但是在App里,需要考虑用户不同的屏幕尺寸,错误信息应该放在一个相对独立且不影响其他元素显示的位置,目前主流的展现形式是这样的:
即悬浮放置在页面的中底部,并且定时自动关闭。这个玩意自己写一个也不难,不过为了省事和好的兼容性,就直接使用三方的@remobile/react-native-toast
了。使用方法如下:
<code class="hljs r has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">import Toast from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'@remobile/react-native-toast'</span>;// <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">...</span>Toast.showShortBottom(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'用户名或密码不正确'</span>); </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
对外的API有以下几个,顾名思义:
<code class="hljs javascript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Toast.showShortTop = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(message)</span> {</span> showToast(message, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"short"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"top"</span>);};Toast.showShortCenter = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(message)</span> {</span> showToast(message, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"short"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"center"</span>);};Toast.showShortBottom = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(message)</span> {</span> showToast(message, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"short"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"bottom"</span>);};Toast.showLongTop = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(message)</span> {</span> showToast(message, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"long"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"top"</span>);};Toast.showLongCenter = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(message)</span> {</span> showToast(message, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"long"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"center"</span>);};Toast.showLongBottom = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(message)</span> {</span> showToast(message, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"long"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"bottom"</span>);};Toast.show = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(message)</span> {</span> showToast(message, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"short"</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"bottom"</span>);};Toast.hide = <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> {</span> RCTToast.hide();};</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li></ul>
安装和使用方法请查看 官方文档
动画库
之前花时间研究过CSS3
的动画库,其实目前主流的动画类型和动画创意就那么些,感兴趣的可以 clone一下 myAnimate 这个项目。一句话,CSS3
里使用的动画方案,ReactNative
里也应有尽有。我这边使用的是 react-native-animatable
组件。使用方式如下:
<code class="hljs scala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> * as Animatable from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native-animatable'</span>;<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ExampleView</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Component</span> {</span> render() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <TouchableOpacity onPress={() => <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.setState({fontSize: (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.state.fontSize || <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>) + <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span> })}> <Animatable.Text transition=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"fontSize"</span> style={{fontSize: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.state.fontSize || <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>}}>Size me up, Scotty</Animatable.Text> </TouchableOpacity> ); }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li></ul>
下面是官方的Demo
调用手机通讯功能
在HybridApp
里实现这个功能还是挺麻烦的,需要客户端封装好接口给H5调用,但是在ReactNative
里,一个组件就能搞定——react-native-communications
,安装请查看官方文档
这个组件安装很简单,支持的功能有:拨号、发短信、发Email、打开网页 等 ,下面是官方一个综合的例子:
<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-reserved" style="box-sizing: border-box;">import</span> React, { Component } from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react'</span>;<span class="hljs-reserved" style="box-sizing: border-box;">import</span> { AppRegistry, StyleSheet, Text, View, TouchableOpacity} from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native'</span>;<span class="hljs-reserved" style="box-sizing: border-box;">import</span> Communications from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native-communications'</span>;<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">RNCommunications</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Component</span>({</span> render() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <View style={styles.container}> <TouchableOpacity onPress={<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> =></span> Communications.phonecall(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'0123456789'</span>, <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>)}> <View style={styles.holder}> <Text style={styles.text}>Make phonecall</Text> </View> </TouchableOpacity> <TouchableOpacity onPress={<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> =></span> Communications.email([<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'emailAddress1'</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'emailAddress2'</span>],<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">null</span>,<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">null</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'My Subject'</span>,<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'My body text'</span>)}> <View style={styles.holder}> <Text style={styles.text}>Send an email</Text> </View> </TouchableOpacity> <TouchableOpacity onPress={<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> =></span> Communications.text(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'0123456789'</span>)}> <View style={styles.holder}> <Text style={styles.text}>Send a text/iMessage</Text> </View> </TouchableOpacity> <TouchableOpacity onPress={<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> =></span> Communications.web(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'https://github.com/facebook/react-native'</span>)}> <View style={styles.holder}> <Text style={styles.text}>Open react-<span class="hljs-reserved" style="box-sizing: border-box;">native</span> repo <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">on</span> Github</Text> </View> </TouchableOpacity> </View> ); }});<span class="hljs-reserved" style="box-sizing: border-box;">const</span> styles = StyleSheet.create({ <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">container</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">flex</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">alignItems</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">backgroundColor</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'rgb(253,253,253)'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">holder</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">flex</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.25</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">justifyContent</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">text</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">fontSize</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span>, },});AppRegistry.registerComponent<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'RNCommunications'</span>, () => RNCommunications)</span>;</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li></ul>
访问手机相册
调取手机相册和上传图片是个老生常谈的问题,ReactNative
里可以通过react-native-image-picker
来处理,安装请查看官方文档
拎一段代码片段:
<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-reserved" style="box-sizing: border-box;">import</span> ImagePicker from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native-image-picker'</span> <span class="hljs-reserved" style="box-sizing: border-box;">const</span> options = { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">title</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'选择上传图片'</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> specify <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">null</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> empty string to remove the title <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">cancelButtonTitle</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'取消'</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">takePhotoButtonTitle</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'拍照...'</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> specify <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">null</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> empty string to remove <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span> button <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">chooseFromLibraryButtonTitle</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'从库中选择...'</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> specify <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">null</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> empty string to remove <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span> button <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">customButtons</span>: { <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'Choose Photo from Facebook'</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'fb'</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> [Button Text] : [String returned upon selection] <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>}, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">cameraType</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'back'</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'front'</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'back'</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">mediaType</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'photo'</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">videoQuality</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'high'</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'low'</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'medium'</span>, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'high'</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">maxWidth</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> photos only <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">maxHeight</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>, <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> photos only <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">allowsEditing</span>: <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">noData</span>: <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>,}<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span>... onUpload() { ImagePicker.showImagePicker<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(options, (response) => { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (response.didCancel) { <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-built_in" style="box-sizing: border-box;">console</span>.log(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'User cancelled image picker'</span>); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (response.error) { <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span><span class="hljs-built_in" style="box-sizing: border-box;">console</span>.log(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'ImagePicker Error: '</span>, response.error); } <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { <span class="hljs-reserved" style="box-sizing: border-box;">let</span> source = {uri: response.uri.replace(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'file://'</span>, <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">''</span>), isLocal: <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>, isStatic: <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">true</span>}; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.setState({ form: {...<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.state.form, avatar: source} }) } })</span> }</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li></ul>
模态框
模态框在App里使用的也比较多,比如确认模态、加载模态、输入模态等,出于良好的用户体验和兼容性考虑,我这里底层采用react-native-modalbox
,然后根据不同功能进行二次加工。
ConfirmModal
很常见,不多做介绍,copy下面代码 直接可以使用
<code class="hljs scala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> React, { Component } from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react'</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> { Dimensions, StyleSheet, Text, TouchableOpacity, View,} from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native'</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> ModalBox from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native-modalbox'</span>;const styles = StyleSheet.create({ modal: { borderRadius: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>, }, modalContent: { flex: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, paddingLeft: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>, paddingRight: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>, }, h2: { marginTop: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>, fontSize: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>, color: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#555'</span>, textAlign: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, modalOption: { flexDirection: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'row'</span>, borderTopWidth: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, borderTopColor: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#ddd'</span>, }, modalCancel: { flex: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, padding: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>, }, modalCancelText: { fontSize: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, textAlign: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, modalConfirm: { flex: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, padding: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>, borderLeftWidth: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, borderLeftColor: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#ddd'</span>, }, modalConfirmText: { fontSize: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, textAlign: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, message: { flex: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, justifyContent: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, alignItems: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, messageText: { color: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#555'</span>, fontSize: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, },});export <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">ConfirmModal</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Component</span> {</span> constructor(props) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>(props); } open() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.refs.modal.open() } close() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.refs.modal.close() } render() { let { width } = Dimensions.get(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'window'</span>); <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <ModalBox ref={<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"modal"</span>} style={[styles.modal, {width: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.width || (width-<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">60</span>), height: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.height || <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>}]} backdropOpacity={<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.3</span>} position={<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"center"</span>} isOpen={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>}> <View style={styles.modalContent}> <Text style={styles.h2}>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.title || <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'提示'</span> }</Text> <View style={styles.message}><Text style={styles.messageText}>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.message }</Text></View> </View> <View style={styles.modalOption}> <TouchableOpacity style={styles.modalCancel} onPress={()=> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.refs.modal.close() }> <Text style={styles.modalCancelText}>取消</Text> </TouchableOpacity> <TouchableOpacity style={styles.modalConfirm} onPress={()=> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.onConfirm() }> <Text style={styles.modalConfirmText}>确定</Text> </TouchableOpacity> </View> </ModalBox> ) }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li></ul>
LoadingModal
这个也很常见,copy下面代码 直接可以使用
<code class="hljs scala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> React, { Component } from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react'</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> { StyleSheet,} from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native'</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> ModalBox from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native-modalbox'</span>;const styles = StyleSheet.create({ modal: { justifyContent: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, alignItems: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, backgroundColor: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'transparent'</span> },});export <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">LoadingModal</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Component</span> {</span> constructor(props) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>(props); } open() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.refs.modal.open() } close() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.refs.modal.close() } render() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <ModalBox style={styles.modal} ref=<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"modal"</span> position={<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"center"</span>} backdrop={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>} isOpen={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.isOpen || <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>} <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//backdropOpacity={.3}</span> backdropPressToClose={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">false</span>} animationDuration={<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>} > </ModalBox> ); }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li></ul>
PickerModal
这个特别讲解一下,PickerModal
用于页面上的Picker
的处理,显示效果如下:
<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-reserved" style="box-sizing: border-box;">import</span> React, { Component } from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react'</span>;<span class="hljs-reserved" style="box-sizing: border-box;">import</span> { Dimensions, StyleSheet, Text, TouchableOpacity, Picker, View,} from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native'</span>;<span class="hljs-reserved" style="box-sizing: border-box;">import</span> ModalBox from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native-modalbox'</span><span class="hljs-reserved" style="box-sizing: border-box;">import</span> dismissKeyboard from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'../mixins/dismiss-keyboard'</span><span class="hljs-reserved" style="box-sizing: border-box;">const</span> styles = StyleSheet.create({ <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">popup</span>: { }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">popupContent</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">flex</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">paddingLeft</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">paddingRight</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">h2</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">marginTop</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">fontSize</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">color</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#555'</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">textAlign</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">popupOption</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">flexDirection</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'row'</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">borderTopWidth</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">borderTopColor</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#ddd'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">popupCancel</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">flex</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">padding</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">popupCancelText</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">fontSize</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">textAlign</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">popupConfirm</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">flex</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">padding</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">15</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">borderLeftWidth</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">borderLeftColor</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#ddd'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">popupConfirmText</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">fontSize</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">textAlign</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">message</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">flex</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">justifyContent</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">alignItems</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">messageText</span>: { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">color</span>: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#555'</span>, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">fontSize</span>: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, },});<span class="hljs-reserved" style="box-sizing: border-box;">export</span> <span class="hljs-reserved" style="box-sizing: border-box;">default</span> <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">PickerModal</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Component</span> {</span> constructor(props) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">super</span>(props); } open() { dismissKeyboard() <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.refs.modal.open() } close() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.refs.modal.close() } _renderPickerItems(data) { data.map<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">((item)=>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> [ <Picker.Item label={item[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]} value={item[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>]} /> ] })</span> } <span class="hljs-title" style="box-sizing: border-box;">render</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> { <span class="hljs-title" style="box-sizing: border-box;">let</span> { <span class="hljs-title" style="box-sizing: border-box;">width</span> } = <span class="hljs-title" style="box-sizing: border-box;">Dimensions</span>.<span class="hljs-title" style="box-sizing: border-box;">get</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'window'</span>)</span>; <span class="hljs-title" style="box-sizing: border-box;">return</span> <span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">( <ModalBox ref={<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"modal"</span>} style={[styles.popup, {width: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.width || (width), height: <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.height || <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">200</span>}]} backdropOpacity={<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.3</span>} position={<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"bottom"</span>} swipeToClose={<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>} isOpen={<span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">false</span>}> <View style={styles.popupContent}> <Picker {...<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props}> {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.dataSource.map((item,i)=> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (item.length) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <Picker.Item key={i} label={item[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]} value={item[<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>]} /> })} </Picker> </View> </ModalBox> )</span> }}</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li><li style="box-sizing: border-box; padding: 0px 5px;">94</li><li style="box-sizing: border-box; padding: 0px 5px;">95</li><li style="box-sizing: border-box; padding: 0px 5px;">96</li><li style="box-sizing: border-box; padding: 0px 5px;">97</li><li style="box-sizing: border-box; padding: 0px 5px;">98</li></ul>
补充说明一下dismissKeyboard()
这个方法,该方法用于关闭页面的keyboard
(键盘),ReactNative
默认没有这种方法,需要自己编写:
<code class="hljs actionscript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"><span class="hljs-keyword" style="box-sizing: border-box;">import</span> { TextInput } from 'react-native';</span><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> { State: TextInputState } = TextInput;export <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">default</span> <span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">function</span> <span class="hljs-title" style="box-sizing: border-box;">dismissKeyboard</span><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">()</span> {</span> TextInputState.blurTextInput(TextInputState.currentlyFocusedField());}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li></ul>
导航条
这个组件其实ReactNative
提供了原生版本的,但是样式和功能上不好控制,建议自己手写一个,代码如下:
<code class="hljs scala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> React, { Component } from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"react"</span>;<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> { Image, Platform, StyleSheet, Text, TouchableOpacity, View,} from <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native'</span>;const styles = StyleSheet.create({ leftButton: { marginLeft: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>, }, rightButton: { marginRight: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>, }, button: { width: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">44</span>, height: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">44</span>, justifyContent: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, alignItems: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, nav: { backgroundColor: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#f9f9f9'</span>, flexDirection: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'row'</span>, alignItems: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, title: { flex: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>, height: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">44</span>, justifyContent: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, }, btnText: { fontSize: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">16</span>, color: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#777'</span>, }, marginForIOS: { marginTop: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>, }, titleText: { fontSize: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">20</span>, textAlign: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'center'</span>, color: <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'#555'</span> }});export <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">RightButton</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Component</span> {</span> render() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <TouchableOpacity style={styles.button} onPress={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.onPress}> { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.text ? <Text style={styles.btnText}>{<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.text}</Text> : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> } { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.icon ? <Image source={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.icon} style={styles.rightButton} /> : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span> } </TouchableOpacity> ); }}export <span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">class</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">NavigatorBar</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">extends</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Component</span> {</span> _leftButton() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.navigator.getCurrentRoutes().length > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <TouchableOpacity style={styles.button} onPress={()=> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.navigator.pop() }> <Image source={require(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'../assets/icon-nav-left.png'</span>)} style={styles.leftButton} /> </TouchableOpacity> ) } _rightButton() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.rightButton) <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <RightButton {...<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.rightButton} /> ) } render() { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> ( <View style={styles.nav}> <View style={[styles.button, Platform.OS==<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'ios'</span> ? styles.marginForIOS : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>]}> {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>._leftButton()} </View> <View style={[styles.title, Platform.OS==<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'ios'</span> ? styles.marginForIOS : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>]}> <Text style={styles.titleText}>{ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.props.name }</Text> </View> <View style={[styles.button, Platform.OS==<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'ios'</span> ? styles.marginForIOS : <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">null</span>]}> {<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>._rightButton()} </View> </View> ); }}</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li><li style="box-sizing: border-box; padding: 0px 5px;">31</li><li style="box-sizing: border-box; padding: 0px 5px;">32</li><li style="box-sizing: border-box; padding: 0px 5px;">33</li><li style="box-sizing: border-box; padding: 0px 5px;">34</li><li style="box-sizing: border-box; padding: 0px 5px;">35</li><li style="box-sizing: border-box; padding: 0px 5px;">36</li><li style="box-sizing: border-box; padding: 0px 5px;">37</li><li style="box-sizing: border-box; padding: 0px 5px;">38</li><li style="box-sizing: border-box; padding: 0px 5px;">39</li><li style="box-sizing: border-box; padding: 0px 5px;">40</li><li style="box-sizing: border-box; padding: 0px 5px;">41</li><li style="box-sizing: border-box; padding: 0px 5px;">42</li><li style="box-sizing: border-box; padding: 0px 5px;">43</li><li style="box-sizing: border-box; padding: 0px 5px;">44</li><li style="box-sizing: border-box; padding: 0px 5px;">45</li><li style="box-sizing: border-box; padding: 0px 5px;">46</li><li style="box-sizing: border-box; padding: 0px 5px;">47</li><li style="box-sizing: border-box; padding: 0px 5px;">48</li><li style="box-sizing: border-box; padding: 0px 5px;">49</li><li style="box-sizing: border-box; padding: 0px 5px;">50</li><li style="box-sizing: border-box; padding: 0px 5px;">51</li><li style="box-sizing: border-box; padding: 0px 5px;">52</li><li style="box-sizing: border-box; padding: 0px 5px;">53</li><li style="box-sizing: border-box; padding: 0px 5px;">54</li><li style="box-sizing: border-box; padding: 0px 5px;">55</li><li style="box-sizing: border-box; padding: 0px 5px;">56</li><li style="box-sizing: border-box; padding: 0px 5px;">57</li><li style="box-sizing: border-box; padding: 0px 5px;">58</li><li style="box-sizing: border-box; padding: 0px 5px;">59</li><li style="box-sizing: border-box; padding: 0px 5px;">60</li><li style="box-sizing: border-box; padding: 0px 5px;">61</li><li style="box-sizing: border-box; padding: 0px 5px;">62</li><li style="box-sizing: border-box; padding: 0px 5px;">63</li><li style="box-sizing: border-box; padding: 0px 5px;">64</li><li style="box-sizing: border-box; padding: 0px 5px;">65</li><li style="box-sizing: border-box; padding: 0px 5px;">66</li><li style="box-sizing: border-box; padding: 0px 5px;">67</li><li style="box-sizing: border-box; padding: 0px 5px;">68</li><li style="box-sizing: border-box; padding: 0px 5px;">69</li><li style="box-sizing: border-box; padding: 0px 5px;">70</li><li style="box-sizing: border-box; padding: 0px 5px;">71</li><li style="box-sizing: border-box; padding: 0px 5px;">72</li><li style="box-sizing: border-box; padding: 0px 5px;">73</li><li style="box-sizing: border-box; padding: 0px 5px;">74</li><li style="box-sizing: border-box; padding: 0px 5px;">75</li><li style="box-sizing: border-box; padding: 0px 5px;">76</li><li style="box-sizing: border-box; padding: 0px 5px;">77</li><li style="box-sizing: border-box; padding: 0px 5px;">78</li><li style="box-sizing: border-box; padding: 0px 5px;">79</li><li style="box-sizing: border-box; padding: 0px 5px;">80</li><li style="box-sizing: border-box; padding: 0px 5px;">81</li><li style="box-sizing: border-box; padding: 0px 5px;">82</li><li style="box-sizing: border-box; padding: 0px 5px;">83</li><li style="box-sizing: border-box; padding: 0px 5px;">84</li><li style="box-sizing: border-box; padding: 0px 5px;">85</li><li style="box-sizing: border-box; padding: 0px 5px;">86</li><li style="box-sizing: border-box; padding: 0px 5px;">87</li><li style="box-sizing: border-box; padding: 0px 5px;">88</li><li style="box-sizing: border-box; padding: 0px 5px;">89</li><li style="box-sizing: border-box; padding: 0px 5px;">90</li><li style="box-sizing: border-box; padding: 0px 5px;">91</li><li style="box-sizing: border-box; padding: 0px 5px;">92</li><li style="box-sizing: border-box; padding: 0px 5px;">93</li></ul>
然后在container里就可以使用了:
<code class="hljs handlebars has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="xml" style="box-sizing: border-box;">import { NavigatorBar } from '../components/navigator' // 没有右侧按钮 <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">NavigatorBar</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"登录"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">navigator</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">{this.props.navigator}</span> /></span> // 右侧按钮为图标 <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">NavigatorBar</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"我的"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">navigator</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">{this.props.navigator}</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">rightButton</span>=</span></span><span class="hljs-expression" style="box-sizing: border-box;">{{<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">onPress</span>: ()=>{<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">this.props.navigator.push</span>({<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">component</span>: <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">Setting</span>})}, <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">icon</span>: <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">require</span>('<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">..</span><span class="hljs-end-block" style="box-sizing: border-box;">/..</span><span class="hljs-end-block" style="box-sizing: border-box;">/assets</span><span class="hljs-end-block" style="box-sizing: border-box;">/icon-set.png</span>')}}</span><span class="xml" style="box-sizing: border-box;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"> /></span>// 右侧按钮为文字 <span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"><<span class="hljs-title" style="box-sizing: border-box; color: rgb(0, 0, 136);">NavigatorBar</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">name</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">"我的订单"</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">navigator</span>=<span class="hljs-value" style="box-sizing: border-box; color: rgb(0, 136, 0);">{this.props.navigator}</span> <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(102, 0, 102);">rightButton</span>=</span></span><span class="hljs-expression" style="box-sizing: border-box;">{{<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">text</span>: '历史 ', <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">onPress</span>: ()=> <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">this.props.navigator.push</span>({<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">component</span>: <span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">OrderHitory</span>}) }}</span><span class="xml" style="box-sizing: border-box;"><span class="hljs-tag" style="color: rgb(0, 102, 102); box-sizing: border-box;"> /></span> </span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>
图片轮播
建议使用三方的react-native-viewpager
组件,安装请查看 官方文档
下面是一个demo:
<code class="hljs coffeescript has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-reserved" style="box-sizing: border-box;">var</span> ViewPager = <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">require</span>(<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">'react-native-viewpager'</span>);<ViewPager dataSource={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>.state.dataSource} renderPage={<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">this</span>._renderPage} animation = {<span class="hljs-function" style="box-sizing: border-box;"><span class="hljs-params" style="color: rgb(102, 0, 102); box-sizing: border-box;">(animatedValue, toValue, gestureState)</span> =></span> { <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> Use the horizontal velocity <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> the swipe gesture <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> to affect the length <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">of</span> the transition so the faster you swipe <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">//</span> the faster the pages will transition <span class="hljs-reserved" style="box-sizing: border-box;">var</span> velocity = Math.abs(gestureState.vx); <span class="hljs-reserved" style="box-sizing: border-box;">var</span> baseDuration = <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">300</span>; <span class="hljs-reserved" style="box-sizing: border-box;">var</span> duration = (velocity > <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>) ? <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>/velocity * baseDuration : baseDuration; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> Animated.timing(animatedValue, { <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">toValue</span>: toValue, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">duration</span>: duration, <span class="hljs-attribute" style="box-sizing: border-box; color: rgb(0, 136, 0);">easing</span>: Easing.out(Easing.exp) }); }}/></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li></ul>
- 基于Redux的ReactNative项目开发总结(一)
- 基于Redux的ReactNative项目开发总结(一)
- 基于Redux的ReactNative项目开发总结(二)
- ReactNative+Redux+LeanCloud开发IM(一)
- 基于Redux架构的单页应用开发总结(一)
- ReactNative redux 总结
- 基于Redux架构的单页应用开发总结(二)
- 基于Redux架构的单页应用开发总结(三)
- Redux学习(一)之添加Redux到自己的项目
- 《ReactNative》之Redux框架的使用
- React与Redux学习总结(一)
- 一步一步学习 ReactNative + Redux(0)
- 一步一步学习 ReactNative + Redux(1)
- 一步一步学习 ReactNative + Redux(2)
- 一步一步学习 ReactNative + Redux(3)
- 一步一步学习 ReactNative + Redux(4:中间件)
- 一步一步学习 ReactNative + Redux(6)
- ReactNative小项目——(一)
- LeetCode 136. Single Number
- UnityShader - 屏幕特效 - 高斯模糊(Gaussian Blur)
- HDU 3488Tour 最大完美匹配
- test
- g2048游戏2-android
- 基于Redux的ReactNative项目开发总结(一)
- 工作两周年记
- ios开发之小总结「类与对象的判断方法和遍历字典的方法」
- 欢迎使用CSDN-markdown编辑器
- 【译】Redux + React 应用程序架构的 3 条规范(内附实例)
- Spring支持邮件开发
- 设计模式(6)-适配器模式(Adapter)
- Handler消息机制
- 获取bing背景图片