学习rn笔记

环境

最新版本0.56.0 有问题
使用指定版本创建rn
react-native init MyApp --version 0.55.0
当有奇奇怪怪的问题无法解决的时候:试试npm cache clean --force
配置webstom 自动提示rn

npm安装包方式

rn开发

模拟器Ctrl+M 打开菜单

界面开发

flex布局 详情

root布局

display:flex

flex-direction: column|默认水平row垂直      
justify-contentcenter水平方向居中垂直不居中|flex-start || flex-end     
align-itemscenter垂直方向居中水平不居中|flex-start || flex-end         
子布局中使用marginauto也能居中但是不是太可控      
不设置宽高的话就是子控件的最大值 

子布局内容布局

text-align:center;可以实现文字的水平方向居中
line-height:div高度;可实现文字的垂直方向居中

JavaScript语法

	
const target = { a: 1, b: 1 };
const source1 = { b: 2, c: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

Object.assign拷贝的属性是有限制的,只拷贝源对象的自身属性(不拷贝继承属性),也不拷贝不可枚举的属性(enumerable: false

   
const promise = new Promise((resolve, reject) => {
setTimeout(function () {
 console.log('耗时操作执行完成');
 resolve('随便什么数据');
}, 2000);

setTimeout(function () {
 console.log('耗时操作执行失败');
 reject('随便什么数据');
}, 3000);

}).then((value) => {
 console.log("resolve结果:" + value)
}, (reason, data) => {
 console.log("reject结果:" + reason);
});
  
class Point {
 constructor() {
  // ...
 }

 toString() {
 // ...
 }

}
let b = new Point();
b.toString();

类可继承和java很像,继承后如果需要重写构造函数的时候,必须要调用super()

	
// CommonJS模块
let { stat, exists, readFile } = require('fs');

// 等同于
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readfile = _fs.readfile;
// ES6模块
import { stat, exists, readFile } from 'fs';	

ES6 的模块自动采用严格模式,不管你有没有在模块头部加上use strict;

严格模式主要有以下限制:

export

导出模块、方法、变量。不导出外面用不到

 // profile.js
 var firstName = 'Michael';
 var lastName = 'Jackson';
 var year = 1958;
 //导出变量
 export {firstName, lastName, year};
 
 //也能导出,引用的时候就是 f l y
 export{f as firstName,l as lastName,y as year}
   
   //导出方法
 export function f() {};
   
 function f() {}
 export {f};
   
   
 //导出模块
 。。。  
   

export default命令是不指定具体别名,导出变量、方法、类等。
import的时候就可以随意起名字import了 import xxx form aaaModule 这时候不能用{}了

import
引入模块,静态分析阶段执行的,不能有语法其他操作

	

  //变量名必须和输出的名字一致,所以说很麻烦,有了export default。 
  import {firstName, lastName, year} from './profile.js';
  //重命名 
  import { lastName as l } from './profile.js';
  
  

import()和import是不同的

	

 //可以动态引用!
if (condition) {
 import('moduleA').then(...);
} else {
 import('moduleB').then(...);
}
//import()加载模块成功以后,这个模块会作为一个对象,当作then方法的参数。
//因此,可以使用对象解构赋值的语法,获取输出接口
import('./myModule.js')
.then(myModule => {
 console.log(myModule.default);
});	

module的加载实现

 <!-- 1传统做法-->
 <!-- 页面内嵌的脚本 -->
 <script type="application/javascript">

 </script>
 <!-- 外部脚本通过defer或async属性 表示该module是同步加载还是异步加载-->
 <script type="application/javascript" src="path/to/myModule.js" 
 defer|async></script>

 <!-- 2es6做法-->
 <!-- es6模块全是异步加载无法设置同步-->
 <script type="module" src="./foo.js"></script>