首頁 > web前端 > js教程 > 深入淺析react native es6語法_javascript技巧

深入淺析react native es6語法_javascript技巧

WBOY
發布: 2016-05-16 15:26:52
原創
1758 人瀏覽過

react native是直接使用es6來寫程式碼,許多新語法能提升我們的工作效率

解構賦值

var {
 StyleSheet,Text,View
} = React;
登入後複製

這句程式碼是ES6 中新增的解構(Destructuring)賦值語句。準許你取得物件的多個屬性並且使用一條語句將它們賦給多個變數。

上面的程式碼等價於:

var StyleSheet = React.StyleSheet;
var Text = React.Text;
var View = React.View
登入後複製

再看幾個例子,以前,為變數賦值,只能直接指定值:

var a = 1;
var b = 2;
var c = 3;
登入後複製

而ES6 允許這樣寫:

var [a, b, c] = [1, 2, 3];
登入後複製

更詳細的內容可參考:變數的解構賦值

箭頭函數

React Native 裡面常常會出現類似的程式碼:

ES6新增的箭頭運算子=> 簡化了函數的書寫。操作符左邊為輸入的參數,而右邊則是進行的操作以及傳回的值Inputs=>outputs

舉幾個栗子感受下:

var array = [1, 2, 3];
//传统写法
array.forEach(function(v, i, a) {
  console.log(v);
});
//ES6
array.forEach(v => console.log(v));
var sum = (num1, num2) => { return num1 + num2; }
//等同于:
var sum = function(num1, num2) {
  return num1 + num2;
 };
登入後複製

更多詳情請自行Google,或查看:https://www.imququ.com/post/arrow-function-in-es6.html

延展操作符(Spread operator)

這個 … 運算子(也被叫做延展運算子 - spread operator)已經被 ES6 陣列 支援。它允許傳遞數組或類別數組直接做為函數的參數而不用通過apply。

var people=['Wayou','John','Sherlock'];
//sayHello函数本来接收三个单独的参数人妖,人二和人三
function sayHello(people1,people2,people3){
  console.log(`Hello ${people1},${people2},${people3}`);
}
//但是我们将一个数组以拓展参数的形式传递,它能很好地映射到每个单独的参数
sayHello(...people);//输出:Hello Wayou,John,Sherlock 
//而在以前,如果需要传递数组当参数,我们需要使用函数的apply方法
sayHello.apply(null,people);//输出:Hello Wayou,John,Sherlock
登入後複製

而在React中,延展運算元一般用於屬性的批次賦值上。在JSX中,可以使用…運算符,表示將一個物件的鍵值對與ReactElement的props屬性合併。

var props = {};
 props.foo = x;
 props.bar = y;
 var component = <Component {...props} />;
//等价于
var props = {};
 props.foo = x;
 props.bar = y;
 var component = <Component foo={x} bar={y} />;
它也可以和普通的XML属性混合使用,需要同名属性,后者将覆盖前者:
JavaScript
var props = { foo: 'default' };
var component = <Component {...props} foo={'override'} />;
console.log(component.props.foo); // 'override'
登入後複製

更多詳細資訊:https://facebook.github.io/react/docs/jsx-spread.html

class

ES6中加入了對類別的支持,引入了class關鍵字(其實class在JavaScript中一直是保留字,目的就是考慮到可能在以後的新版本中會用到,現在終於派上用場了) 。 JS本身就是物件導向的,ES6提供的類別其實只是JS原型模式的包裝。現在提供原生的class支援後,物件的創建,繼承更加直觀了,並且父類別方法的調用,實例化,靜態方法和建構函數等概念都更加形象化。

class PropertyView extends Component {
  render() {
    return (
      <View></View>
    )
  }
}
//等价于
var PropertyView = React.createClass({
  render() {
    return (
      <View></View>
    )
  }
})
登入後複製

 方法定義(method definition)

ECMAScript 6中,引入了一種名叫方法定義(method definition)的新語法糖,相對於以前的完整寫法,這種簡寫形式可以讓你少寫一個function鍵字.

React.createClass({
  render() {
    return (
      <View></View>
    )
  }
})
//等价于
React.createClass({
  render : function() {
    return (
      <View></View>
    )
  }
})
登入後複製

最後,推薦一個ES6的PPT,寫得不錯:http://khan4019.github.io/ES6/

react native是直接使用es6來寫程式碼,許多新語法能提升我們的工作效率

解構賦值

var {
	 StyleSheet,
	 Text,
	 View
	} = React;
登入後複製

這句程式碼是ES6 中新增的解構(Destructuring)賦值語句。準許你取得物件的多個屬性並且使用一條語句將它們賦給多個變數。

上面的程式碼等價於:

	var StyleSheet = React.StyleSheet;
	var Text = React.Text;
	var View = React.View
登入後複製

再看幾個例子,以前,為變數賦值,只能直接指定值:

 var a = ;
 var b = ;
 var c = ;
登入後複製

而ES 允許這樣寫:

var [a, b, c] = [, , ];
登入後複製

更詳細的內容可參考:變數的解構賦值

箭頭函數

React Native 裡面常常會出現類似的程式碼:
ES6中新增的箭頭運算子=> 簡化了函數的書寫。操作符左邊為輸入的參數,而右邊則是進行的操作以及傳回的值Inputs=>outputs

舉幾個栗子感受下:

	var array = [, , ];
//传统写法
	array.forEach(function(v, i, a) {
	  console.log(v);
	});
//ES
	array.forEach(v => console.log(v));
	var sum = (num, num) => { return num + num; }
//等同于:
	var sum = function(num, num) {
	  return num + num;
	 };
登入後複製

更多詳情請自行Google,或查看:https://www.imququ.com/post/arrow-function-in-es6.html
延展操作符(Spread operator)
這個 … 運算子(也被稱為延展運算子 - spread operator)已經被 ES6 陣列 支援。它允許傳遞數組或類別數組直接做為函數的參數而不用通過apply。

 var people=['Wayou','John','Sherlock'];
//sayHello函数本来接收三个单独的参数人妖,人二和人三
 function sayHello(people,people,people){
   console.log(Hello ${people},${people},${people});
 }
//但是我们将一个数组以拓展参数的形式传递,它能很好地映射到每个单独的参数
 sayHello(...people);
//输出:Hello Wayou,John,Sherlock
//而在以前,如果需要传递数组当参数,我们需要使用函数的apply方法
 sayHello.apply(null,people);
//输出:Hello Wayou,John,Sherlock
而在React中,延展操作符一般用于属性的批量赋值上。在JSX中,可以使用…运算符,表示将一个对象的键值对与ReactElement的props属性合并。
 var props = {};
  props.foo = x;
  props.bar = y;
  var component = <Component {...props} />;
//等价于
 var props = {};
  props.foo = x;
  props.bar = y;
  var component = <Component foo={x} bar={y} />;
登入後複製

它也可以和普通的XML屬性混合使用,需要同名屬性,後者會覆蓋前者:

 var props = { foo: 'default' };
 var component = <Component {...props} foo={'override'} />;
 console.log(component.props.foo);
// 'override'
登入後複製

更多详细信息:https://facebook.github.io/react/docs/jsx-spread.html

class

ES6中添加了对类的支持,引入了class关键字(其实class在JavaScript中一直是保留字,目的就是考虑到可能在以后的新版本中会用到,现在终于派上用场了)。JS本身就是面向对象的,ES6中提供的类实际上只是JS原型模式的包装。现在提供原生的class支持后,对象的创建,继承更加直观了,并且父类方法的调用,实例化,静态方法和构造函数等概念都更加形象化。

	class PropertyView extends Component {
	  render() {
	    return (
	      <View></View>
	    )
	  }
	}
//等价于
	var PropertyView = React.createClass({
	  render() {
	    return (
	      <View></View>
	    )
	  }
	})
登入後複製

方法定义(method definition)

ECMAScript 6中,引入了一种名叫方法定义(method definition)的新语法糖,相对于以前的完整写法,这种简写形式可以让你少写一个function键字.

 React.createClass({
   render() {
     return (
       <View></View>
     )
   }
 })
//等价于
 React.createClass({
   render : function() {
     return (
       <View></View>
     )
   }
 })
登入後複製

以上是小编给大家分享的react native es6语法,希望大家喜欢。

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板