1.TextInput组件对安卓的适配问题

textInput 在iOS 显示正常,但是在android下会出现下横线,并且字会被遮盖

因此一般都这么用该组件

<TextInput style={{paddingVertical:0}} underlineColorAndroid="transparent" />

2.关于样式

附react native可使用的样式属性:

https://github.com/doyoe/react-native-stylesheet-guide

https://github.com/vitalets/react-native-extended-stylesheet

react native的样式不存在继承的情况,所以基本上每个节点都要写style

Text 组件 文字必须放在Text元素里边,Text元素可以相互嵌套,且存在样式继承关系,被嵌套的Text 设置的间距是无效的。默认情况下,文本被按下时会有一个灰色的阴影,如果想取消就 把 属性 suppressHighlighting 设置为 true ,

<Text suppressHighlighting={true} ></Text>

设置border属性只能在View上,不能在Text上 ,自测了下,安卓下写在Text是生效的,但是在ios下不生效。

3.IOS平台下请求接口报错

IOS - fetch request from ios simulator fails

参考链接:https://github.com/facebook/react-native/issues/4415

This is probably caused because the latest iOS SDK enforces connections to be under https protocol, instead of plain http.
You can add an exception to your domain in the info.plist file of the Xcode project.
something like this should work:

解决办法:找到 Info.plist文件,

修改为

<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>myDomain.com</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
...other exceptions like localhost...
</dict>
</dict>

把请求的接口 域名 加到key上 就好啦。

4.关于setState

当我们调用 setState 的时候,React.js 并不会马上修改 state。而是把这个对象放到一个更新队列里面,稍后才会从队列当中把新的状态提取出来合并到 state 当中,然后再触发组件更新。

也就是说:setState方法是异步的,如果给一个state变量量赋值后,马上获取改变后的值,有可能是不正确的。

详细讲解参考:http://huziketang.mangojuice.top/books/react/lesson10

现在有这样的需求

点击 “已披露” 和“未披露”改变参数值,handePilouChange(0) , handePilouChange(1)

handePilouChange(tag) {
if (tag == this.state.pilouActive) {
return
}
this.state.pilouActive = tag
this.state.PAGENUM = 1
this.setState({
pilouActive: tag,
PAGENUM: 1,
hasMore: false
})
this.getData()
}

当我们在调用 this.getData()  函数时,需要拿到最新的state值,如果单纯的使用  this.setState({pilouActive: tag}) 在 getData函数中我们发现 当前的state还是之前的state的值,没有立即改变,此时的做法是

this.state.pilouActive = tag

5.关于路由切换

在 React Native 中,官方已经推荐使用 react-navigation 来实现各个界面的跳转和不同板块的切换

相关链接:

导航路由跳转:https://reactnavigation.org/docs/zh-Hans/getting-started.html

路由跳转切换方式:https://www.cnblogs.com/CrazyWL/p/7283600.html

这里着重说下 StackNavigator 导航组件

基本使用案例:

import { createStackNavigator } from 'react-navigation'

const MainStack = createStackNavigator(
{
Home: {
screen: IndexPage
},
Details: {
screen: DetailPage
},
},
{
initialRouteName: 'Home',
headerMode: 'none',
transitionConfig: () => ({
transitionSpec: {
duration: 350,
easing: Easing.out(Easing.poly(4)),
timing: Animated.timing,
},
screenInterpolator: sceneProps => {
const { layout, position, scene } = sceneProps
const { index } = scene
const width = layout.initWidth
const translateX = position.interpolate({
inputRange: [index - 1, index, index + 1],
outputRange: [width, 0, 0]
})
const opacity = position.interpolate({
inputRange: [index - 1, index - 0.99, index],
outputRange: [0, 1, 1]
})
return { opacity, transform: [{ translateX }] }
},
})
}
); export default class rootApp extends Component{
constructor(props) {
super(props)
}
render() {
return (
<MainStack />
)
}
};

需要注意的是 transitionConfig(配置页面跳转的动画,覆盖默认的动画效果)

内置的跳转动画在 react-navigation/src/views/CardStack/CardStackStyleInterpolator中,共三种。forHorizontal:从右向左进入、forVertical:从下向上进入、forFadeFromBottomAndroid:从底部淡出。

在安卓上运行时,默认的跳转动画效果是 forFadeFromBottomAndroid 。但是这种切换效果和传统的切换效果不一样,这时候我们可以自定义切换效果。

参考文章:https://github.com/react-navigation/react-navigation/pull/1187#issuecomment-300112470

react-navigation 监听页面显隐   https://reactnavigation.org/docs/en/navigation-prop.html

react native定报预披项目知识点总结的更多相关文章

  1. 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结

    将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...

  2. [RN] React Native 使用 图片预览和放大 插件 react-native-image-zoom-viewer 过程中,放大报错问题

    React Native 使用 图片预览和放大 插件 react-native-image-zoom-viewer 过程中,放大报错问题 报错如下: Cannot record touch end w ...

  3. [RN] React Native 实现图片预览

    [RN] React Native 实现图片预览 效果预览: 代码如下: 'use strict'; import React, {Component} from 'react'; import {I ...

  4. react native 环境报错

    按照react native中文网的文档安装 1.brew 管理软件 2.node 在终端启动工程后就报下面这个错误 这个错误是在RN在第一次配置环境启动一个工程的时候 ,在这过程中下载的缓存文件不完 ...

  5. React Native 0.56.1初始化项目运行出现错误(Module `AccessibilityInfo` does not exist in the Haste module map)

    当使用react-native init myApp初始化项目时,出现以下错误 出现以上错误的原因是因为0.56.1版本初始化项目就有问题,请见 https://github.com/facebook ...

  6. React Native 日常报错

    在学习React.js 或 React Native 过程中,有时看着别人的框架或代码,但总是会出现错误,因为React或之中用到的一些包经常更新,有些代码或教程就显得过旧了. 一.日常报错 'con ...

  7. React Native环境配置、初始化项目、打包安装到手机,以及开发小知识

    1.前言 环境:Win10 + Android 已经在Windows电脑上安装好 Node(v14+).Git.Yarn. JDK(v11) javac -version javac 11.0.15. ...

  8. React Native技术做的一个项目“微笑阅读”

    最近用React Native做了一个APP应用,有点心得: React Native确实比Hybrid应用渲染快,响应快,用户体验更好: React Native比原生简单多了,会Js就可以了,开发 ...

  9. React Native 基础报错及解决方案记录

    刚开始上手RN,碰到很多坑,记录一下.碰到问题多去看看github上面的issue! 启动命令react-native run-ios报错 1.:xcrun: error: unable to fin ...

随机推荐

  1. Java 中的几种线程池,你之前用对了吗

    好久不发文章了,难道是因为忙,其实是因为懒.这是一篇关于线程池使用和基本原理的科普水文,如果你经常用到线程池,不知道你的用法标准不标准,是否有隐藏的 OOM 风险.不经常用线程池的同学,还有对几种线程 ...

  2. 简简单单的Vue3(插件开发,路由系统,状态管理)

    既然选择了远方,便只顾风雨兼程 __ HANS许 系列:零基础搭建前后端分离项目 系列:零基础搭建前后端分离项目 插件 路由(vue-router) 状态管理模式(Vuex) 那在上篇文章,我们讲了, ...

  3. 一个.Net网站的成长历程

    引言: 时光匆匆,如白驹过隙,又一次来到了这个节点,回首逝去的日子,有收获也有遗憾... 年底的日子总是那么悠闲,趁着这些悠闲的时光,整理一下自己平时在工作中的收获. 之所以取这个标题呢一来是为了让自 ...

  4. 用JS在html页面实现打印功能

    首先在head里面加入下面一段js代码: <script language="javascript"> function preview(oper) { if (ope ...

  5. 编程心法 之 Scrum - Agile 敏捷开发

    Scrum是一种敏捷开发的方法 先定一个能达到的小目标 Scrum 团队 包括产品负责人.开发团队和Scrum Master Product Owner 产品负责人:管理代办事项和优先级的唯一负责人. ...

  6. Nginx配置了解

    安装Nginx常用编译选项说明 nginx大部分常用模块,编译时./configure --help查看,以--without开头的都是默认安装. --prefix=PATH 指定nginx的安装目录 ...

  7. vue路由懒加载 及import

  8. datatable的部分问题处理(动态定义列头,给某行添加事件,初始显示空数据)

    一.动态定义列头 在ajax中,用datatable再去重新配置列头,当然传回的数据中,要有对应放列头的键值对 我自定义了Mock数据,用于前端自己交互. 其中,rowdata用于存放传回的数据,co ...

  9. MVC 伪静态路由、MVC路由配置,实现伪静态。

    前段时间,研究了一下mvc路由配置伪静态,在网上扒了很多最后还是行不通,所以我现在把这些心得整理出来,供大家分享: 1.mvc中默认路由配置是:http://localhost:24409/Home/ ...

  10. extjs ajax 请求成功也会进入failure

     Ext.Ajax.request({ url: '路径', method : 'post',   params : {     传的参数   }, success: function (action ...