1. 程式人生 > >React-native第一課,Button的新增

React-native第一課,Button的新增

    前兩天開始著手react-native,之前的時間都費在環境上了,今天正式程式碼的第一課。看過網上的資料,現在綜合整理一下以備後續檢視。

    首先,react-native 的環境配置見http://reactnative.cn/docs/0.24/getting-started.html#content

    然後進入程式碼環節了,我這裡編寫程式碼的環境是Atom。

    首先是在頁面中顯示一個Button,圖片如下。


   實現程式碼如下,修改index.android檔案,我這裡用到的按鈕控制元件為 TouchableOpacity

 import React, {
  AppRegistry,
  Component,
  StyleSheet,
  Text,
  View,
  TouchableOpacity   <--加入引用


} from 'react-native';

  render() {
    return (
      <View style={styles.container}>
        <TouchableOpacity style={styles.button}>     加入控制元件,這裡的屬性設定為使用的style,以下會有程式碼
        <Text style={styles.textstyle}>
          確定         <--------顯示字型
        </Text>
        </TouchableOpacity>


      </View>
    );
  }

const styles = StyleSheet.create({          <-------style定義
  button:{
    height: 80,
    width: 200,
    backgroundColor:'gray',
   justifyContent:'center',
   borderRadius: 20,
    },
 textstyle:{
   textAlign:'center',
   fontSize:20,
 },......

      這樣單純的顯示Button就完成了,其次關心的一定是Button的點選事件了,那麼以下我們就來實現以下Button的點選事件吧

      給 TouchableOpacity新增點選事件的屬性是onPress,有點像android中在xml給button新增點選事件的方法。

    class Test extends Component {
    onclick=() => {
       alert('我點選了按鈕');
    };


  render() {
    return (
      <View style={styles.container}>
        <TouchableOpacity
         style={styles.button}
         onPress ={this.onclick}
         >
        <Text style={styles.textstyle}>
          確定
        </Text>


        </TouchableOpacity>
      </View>
    );
  }
}

   這樣的話簡單的點選事件就處理完了。我們下面嘗試自己封裝一個Button,主要牽扯到一些JS的用法,對於像我這種java選手剛接觸到JS的來說,下面的程式碼還是蠻精緻的。

   首先沾程式碼的。自己的Button

  /**
 * xiaoaxue 2016.4.21
 */

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

export default class Button extends Component {

constructor(props){
    super(props);
    this.state = {
      _text:props.text,
    }
  }
  onclick=() => {
      alert('我點選了按鈕');
  };

  render() {
    //大括號叫解構,將props中的屬性text取出來放入text中,好處是可以取多個值
    const {text,background}  = this.props;
    return (
      <View style={styles.container}>
        <TouchableOpacity
        style={[styles.button,{backgroundColor:background}]}>
        <Text style={styles.textstyle}>
         {/*{this.props.text}*/}
        {this.state._text}
        </Text>
        </TouchableOpacity>
      </View>
    );
  }
}


const styles = StyleSheet.create({
  button:{
    height: 80,
    width: 200,
    backgroundColor:'gray',
   justifyContent:'center',
   borderRadius: 20,
 },
 textstyle:{
   textAlign:'center',
   fontSize:20,
 },
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
});

index中修改:

import Button from './src/component/Button';


class Test extends Component {
  render() {
    return (
      <View style={styles.container}>
      {/* props,屬性*/}
        <Button text = "確定"  background ="red"/>
        <Button text = "取消"  background ="gray"/>
      </View>
    );
  }
}

  程式碼要點:

  1. 自己封裝Button時通過構造方法傳引數取值有兩種方式

      ①:  構造引數為props,在構造方法內部取值

                 this.state = {
               _text:props.text,
              }

         呼叫時為this.state._text

     ②:  解構

               const {text,background}  = this.props;

               優點在於可解多個,呼叫時為this.props.text