React native 常用组件之View

一、 JSX和组件的概念
React的核心机制就是虚拟DOM,可以在内存中创建的虚拟DOM元素,React利用虚拟DOM来减少对实际DOM的操作从而提升性能。传统的创建方式是:

var newStar = document.createElement('div');
newStar.className = 'star';
document.getElementById('main').appendChild(newStar);

var pic = document.createElement('img');
img.src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png";
img.className='avatar';
document.getElementById('main').appendChild(pic);

但是这样代码的可读性并不是很理想,于是React发明了JSX,利用我们熟悉的HTML语法来创建虚拟DOM:

 var root = (
<div id="main">
  <div className="star">
  </div>
  ![](https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png)    
</div>
)

在实际开发中,JSX在产品打包阶段都已编译成纯Javascript,JSX的语法不会带来任何的性能影响。

二。 View组件中常见的属性。
React Native中的组件View,它相当于iOS中的UIView,android中的Android.View,html中的div标签,它是所有组件的父组件。

Flexbox 弹性布局
ShadowProp (支持ios)阴影
Transform 动画属性
backfaceVisibility enum('visible', 'hidden')

backgroundColor string

borderColor string

borderTopColor string

borderRightColor string

borderBottomColor string

borderLeftColor string

borderRadius number

borderTopLeftRadius number

borderTopRightRadius number

borderBottomLeftRadius number

borderBottomRightRadius number

borderStyle enum('solid', 'dotted', 'dashed')

borderWidth number

borderTopWidth number

borderRightWidth number

borderBottomWidth number

borderLeftWidth number

opacity number

overflow enum('visible', 'hidden')
等:具体属性详见 [React Native 中文网](http://reactnative.cn/docs/0.46/view.html#content)

三、View组件的运用

export default class RNTestDemo extends Component {
  render() {
    return (
      <View style={{flex:1,backgroundColor:'green',padding:20}}>
        <View style={{width:300,height:50,backgroundColor:"blue"}}></View>
        <View style={{width:100,height:50,backgroundColor:"yellow",marginTop:10}}></View>
      </View>
    );
  }
}
在代码的render函数中,我们返回了一个顶层(原谅色)的View,然后这个父视图中包含了另外两个(蓝色和黄色的)两个子View。
在顶层View中的style属性里面设置了占满父控件的属性(flex:1), 内边距为20,背景颜色为原谅色。对应子层中的蓝色视图,宽为300,高度50。�子层中的黄色视图,上边距为10。

下图是运行效果:

屏幕快照 2017-07-17 上午11.36.22.png

在React native中,采用StyleSheet来进行布局能使我们的代码更加规范和利于维护,如:

/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View
} from 'react-native';

export default class RNTestDemo extends Component {
  render() {
    return (
      <View style={styles.container}>
        <View style={styles.blueViewStyle}></View>
        <View style={styles.yellowViewStyle}></View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
    container:{
      flex:1,
      backgroundColor:'green',
      padding:20
    },
    blueViewStyle:{
      width:300,
      height:50,
      backgroundColor:"blue"
    },
    yellowViewStyle:{
      width:100,
      height:50,
      backgroundColor:"yellow",
      marginTop:10
    }

});

AppRegistry.registerComponent('RNTestDemo', () => RNTestDemo);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,179评论 25 708
  • 一、 JSX和组件的概念 React的核心机制之一就是虚拟DOM:可以在内存中创建的虚拟DOM元素。React利用...
    阿凡提说AI阅读 300评论 0 0
  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,858评论 1 18
  • 今天在整理先生年會視頻裡的語錄,當一句一句去品味記錄先生的話时,不禁眼眶濕潤。“這是繼儒釋道之後,未來20...
    精尚阅读 327评论 0 0
  • (1)generte_keys :双击,运行会生成两个证书,一个私钥,一个公钥。 (2)公钥:放到工程文件目录下 ...
    L柠_檬阅读 1,832评论 0 1