RN基础简介

Props

大多数组件在创建时都需要用各种不同的参数来自定义,这些参数就称作props。
例如,创建一个image时,可以使用source属性进行控制图片显示。

import React, { Component } from 'react';
import { AppRegistry, Image } from 'react-native';
 
class Bananas extends Component {
  render() {
    let pic = {  
    uri: 'https://upload.wikimedia.org/wikipedia/commons/d/de/Bananavarieties.jpg'
    };
    return (
      <Image source={pic} style={{width: 193, height: 110}}/>
    );
  }
}
AppRegistry.registerComponent('Bananas', () => Bananas);

注意到:{pic}通过大括号包围,这样就把pic变量迁入到JSX语句中。通过这样方法可以把任何正确合法的JavaScript的表达式迁入到JSX中。

自定义的组件也可以使用props。可以在不同场景下,通过不同属性定制组件,最后在你的render()方法直接通过this.props进行引用即可。

import React, { Component } from 'react';
import { AppRegistry, Text, View } from 'react-native';
 
class Greeting extends Component {
  render() {
    return (
      <Text>Hello {this.props.name}!</Text>
    );
  }
}
 
class LotsOfGreetings extends Component {
  render() {
    return (
      <View style={{alignItems: 'center'}}>
        <Greeting name='Rexxar' />
        <Greeting name='Jaina' />
        <Greeting name='Valeera' />
      </View>
    );
  }

这样就可以根据属性值不同从而复用该组件了。当然,上面也看到了一些View组件,这个View组件是其他组件的容器,可以用来帮助控制风格、样式和布局。我们可以使用props和一些基础的View,Image,Text组件,就足以编写出各式各样的UI界面了。

state

改变组件一般有两种类型的数据:props和state。
props是在父组件中进行设置,只要设置完成,该组件在声明周期中就定死。
针对数据变化修改的情况,需要使用state。

一般情况下,需要在constructor方法中进行初始化state,然后在想要修改更新的时候,调用setState方法即可。实际中,当服务器有新数据的响应,或有用户输入时,也可以使用一些例如Redux的状态容器来进行统一管理数据,而不是直接调用setState。

Style

在React Native中,定制样式只需通过JavaScript定义应用的样式。所有核心的组件都有style的属性。

在实际开发中,组件的样式可能比较复杂,推荐的常用方法是使用StyleSheet.create来在一个地方定义多种样式。

import React, { Component } from 'react';
import { AppRegistry, StyleSheet, Text, View } from 'react-native';
 
class LotsOfStyles extends Component {
  render() {
    return (
      <View>
        <Text style={styles.red}>just red</Text>
        <Text style={styles.bigblue}>just bigblue</Text>
        <Text style={[styles.bigblue, styles.red]}>bigblue, then red</Text>
        <Text style={[styles.red, styles.bigblue]}>red, then bigblue</Text>
      </View>
    );
  }
}
 
const styles = StyleSheet.create({
  bigblue: {
    color: 'blue',
    fontWeight: 'bold',
    fontSize: 30,
  },
  red: {
    color: 'red',
  },
});
 
AppRegistry.registerComponent('LotsOfStyles', () => LotsOfStyles);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容