RN or QRN 知识点

part1

  1. 定位:默认 position:relative,position:absolute 相对父元素
<View>
    <View>
        <View style={{height: 200, width: 200, backgroundColor: 'red', position: 'absolute'}}/>
    </View>
    <View style={{height: 100, width: 100, backgroundColor: 'pick'}}/>
    <View style={{height: 100, width: 100, backgroundColor: 'blue', position: 'absolute'}}/>
</View>
  • flexDirection 默认是 column
  • View 默认撑满容器
  • 所有的宽度和高度必须是确定的(flex 或固定值)
  1. ScrollView
  • 本身是 flex:1的,高度由外层容器决定
  • 内容必须有确定高度,不能是 flex
  1. ListView:
  • 分组:renderSectionHeader
constructor() {
    super();

    this.ds = new ListView.DataSource({
        rowHasChanged: (r1, r2) => r1 !== r2,
        sectionHeaderHasChanged: (s1, s2) => s1 !== s2
    });
    let sections = {
        part1: [],
        part2: []
    };
    for (let i = 0; i < 10; i++) {
        if (i < 10) {
            sections.part1.push(i)
        } else {
            sections.part2.push(i)
        }
    }
    this.state = {
        noMore: false,
        sections: sections,
        dataSource: this.ds.cloneWithRowsAndSections(sections),
    };
}
<View style={{flex: 1, padding:100}}>
    <ListView
        ref="ListView"
        dataSource={this.state.dataSource}
        renderRow={(rowData) => <View style={{flex: 1, borderBottomWidth: 1, borderColor: '#ccc'}}><Text
            style={{padding: 10, fontSize: 14}}>{rowData}</Text></View>}
        renderSectionHeader={(sectionData, sectionID) => <Text
            style={{padding: 10, backgroundColor: 'pink'}}>{sectionData} {sectionID}</Text>}
        refreshControl={refreshControl}
        loadControl={loadControl}
    />
</View>
  1. 动画
  • 设置初始值:Animated.Value 设置一个或多个初始值(透明度、位置等)
  • 设置动画状态:Animated.timing 等函数
_animate(){
    this.state.angle.setValue(0);
    this._anim = Animated.timing(this.state.angle, {
        toValue:1,
        duration: this.props.speed,
        easing: Easing.linear
   }).start(() => this._animate())
}
  • 启动、停止动画:组件销毁时,一定要销毁动画
    RN、QRN 里所有异步的内容,在组件销毁时都需要处理,因为 JSCore 是不销毁的。
componentDidMount(){
    this._animate();
}

componentWillUnmount(){
    if(this._anim){
         this._anim.stop();
        this._anim = null;
    }
}
  1. 开发者可以通过 class Demo extends QXXX {} 的方式创建 QReact View 或 Component,并使用 QReact 的插件特性。在你引用 Ext 进来的同时,会默认引入全局变量 QView 和 QComponent。
  2. Router 的使用:封装原生的 Navigator 组件,无需手动配置路由映射关系,RN、QRN 本来就没有 url,根本不存在路径。
  • 定义页面(QView)
class PageA extends QView{}
class PageB extends QView{}
  • 配置入口
import './PageA';
import './PageB';

Ext.defaults.hybridId = 'HelloWorld';
Ext.defaults.appName = 'HelloWorld';
Ext.defaults.indexView = 'PageA';
  • 调用 API 跳转
Ext.open('PageA');
//....
Ext.back();
  1. Hy 并不具备中间页面的功能,Hy 是多页的,一个页面是一个 native 页面;RN 是伪多页,多个页面是一个 native 页面。

part2


  1. Chrome 调试:
  • 关掉你的本地代理
  • 会自动开启调试窗口
  • 保证只有一个调试窗口,调试窗口在浏览器最上层
  • 开启 Debug Mode,关掉 Minify
  1. 项目入口:iconfont
import { FontLoader } from ''qunar-react-native;
FontLoader.loadFontSet(require('QFontSet'));

在 QRN 中使用 iconfont:

module.exports = {
   'hybridId': 'https://s.qunarzz.com/../hybridId.ttf'
}

使用:

<Text style={{fontFamily: ''}}

part3


  1. 获取屏幕像素密度的方法
  • React:window.devicePixelRatio
  • RN/QRN: PixelRatio.get()
  1. 获取页面宽高的方法
  • RN:Dimensions.get('window').width/height
  • React: document.documentElement.clientHeight/clientWidth
  1. 获取状态栏高度的方法
  • Dimensions.get('window').statusBarHeight
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 170,568评论 25 707
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,613评论 4 59
  • 有的妈妈说:我的孩子有这个问题! 又一个妈妈说:哦,我家也是这样。 另一个妈妈说:不要紧,我们家是这样过来的。 有...
    画屏闲展阅读 318评论 1 1
  • 今天,有个从知乎过来的人,询问有关少儿英语机构加盟的问题,她诚恳地提到愿意付费咨询。 我心想:这应该是一个比较靠谱...
    青三盗阅读 290评论 0 0
  • 石神最后痛苦得仿佛呕出灵魂。前面是跪着泪流满面的靖子,后面是汤川,轻拍他的肩膀。画面定格在这一刻,故事戛然而止。谜...
    L猪尾巴阅读 298评论 3 2