0%

接口

定义方法中参数的约束

1
2
3
4
5
function printLabel(label: string): void {
console.log("")
}

printLabel("sss");

自定义方法传入参数对json的约束

1
2
3
4
5
function printLabel(labelInfo: { label: string }): void {
console.log("")
}

printLabel({ label: "ssss" });
Read more »

参数

参数类型

可以在变量的后面用冒号来指定该参数的类型

1
2
3
4
5
6
var myname: string = "hello"
myname = 0 // 提示类型错误

// typescript有类型推断
var myage = "xixi"
myage = 13 // 提示类型错误
Read more »

App跨平台方案

Hybrid框架

Hybrid App,其实就是原生应用和Web应用相结合,一般做法就是项目中的某一部分是原生界面,一部分是Web页面,通过原生平台的WebView去调用Web页面。

由于原生WebView存在一定的局限性,和Web交互起来有些问题不好处理,于是出现了一些基于原生WebView封装的Hybrid框架,这些框架有一个共同特点:封装了移动端设备上最常用的本地API调用,然后以统一的Javascript API形式提供给Web开发者调用。这样一来原生不能解决的问题可以用Web去处理,同时你也可以自己封装原生API,做成一些插件使用。比较热门的Hybrid框架有Ionic、Cordova、DCloud:

Read more »

简介

React Hooks 是 React 16.7.0-alpha 版本推出的新特性,它主要目的是为了解决状态共享的问题。是继 render-propshigher-order components 之后的第三种状态共享方案,不会产生 JSX 嵌套地狱问题。

React Hooks 带来的好处不仅是 “更 FP,更新粒度更细,代码更清晰”,还有如下三个特性:

  1. 多个状态不会产生嵌套,写法还是平铺的(renderProps 可以通过 compose 解决,可不但使用略为繁琐,而且因为强制封装一个新对象而增加了实体数量)。
  2. Hooks 可以引用其他 Hooks。
  3. 更容易将组件的 UI 与状态分离。

在react-native的0.59.0中,即可支持react hooks的写法。

Read more »

模版

项目模版就是在项目创建之后,默认带的一些文件。比如用react-native-cli创建的项目,运行之后就会看到react-native为你预设的模版

hello world。这里就介绍一下如何创建自己的模版工程,将一些常用的功能放入模版之中,以后再新建项目不必从头开始配置了。

创建模版

通过如下命令创建模版工程

1
react-native init XXX --template AAA

其中AAA是你的模版在npm上的名称,可以供别人使用。新建完工程之后,它和普通的项目没有区别。可以在上面加入你需要的功能。完成之后在package.json中修改你的模版名称以及版本号

1
2
3
4
{
"name": "react-native-template-AAA",//上传 NPM 仓库的名称
"version": "0.0.2"//版本号,同一仓库不可以上传两次同版本号的内容
}

之后就可以上传至npm官网上。注册完账号之后在命令行中登录

1
npm adduser --registry http://registry.npmjs.org

之后进入你的模版工程目录发布即可

1
npm publish --registry http://registry.npmjs.org
Read more »

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。Redux可以作为任何UI层的store,所以它可以运行在Angular、Angular 2、 Vue、React甚至React-Native中。Redux 提供的订阅机制,可以与任何代码集成。这里仅仅记录一些Redux在React-Native中的实现。

为什么要用状态管理

在React中已经提供了state以及setState来实现页面的改动,那么为什么需要状态管理呢?无论是Mobx还是Redux都作为setState的替代品。那么state以及setState有什么缺陷,必须通过这种第三方的状态管理的介入去构建应用。

setState方法在React中是一个很重要的方法,每当调用setState的时候React会重新渲染render方法,其中调用state的值就会相应发生改变,也就完成了一次页面响应。在React的教程中,也大多是这种介绍。那么问题在哪里呢?

Read more »

简介

JavaScript作为一种脚本语言是没有参数类型这个概念的,所以在编写代码的时候可以给参数赋予任何类型的值。在写JS的时候不用考虑参数类型、参数定义等等概念。当项目逐渐变大,人员逐渐变动的时候,没有任何参数类型再加上代码命名不规范,代码将变得十分难以维护。面对一个参数变量不知道它是用来做什么的。可能会有如下代码:

1
2
3
4
5
6
7
8
main = () => {
//fn1函数获取了一个数据
var object = fn1()
//fn2根据获数据,产生一个结果
var result = fn2(object)

return result
}

Flow是个JavaScript的静态类型检查工具,所谓类型检查,就是在编译期尽早发现(由类型错误引起的)bug,又不影响代码运行(不需要运行时动态检查类型),使编写 JavaScript 具有和编写强类型语言相近的体验。

由于之前是写Objective-C的,对于类型检查还是比较能接受的。虽然在编写代码的时候会繁琐一些,但是由于提前声明了参数的类型,使用起来会更加的“放心”。

Read more »

前言

最近要开始写一个新的项目,算是将之前的项目做个总结。把有缺陷的地方进行修改,没有引入的组件引入,算是做一个提炼总结,把之前没有办法修改的问题一一修正。

创建项目

我这里使用的是官方提供的react-native-cli

1
react-native init newProject --version 0.57.0

新项目当然是使用最新版本了,react-native从低版本向上升级真的是痛苦。

创建完新的项目之后当然是建立目录结构,目录结构确实是对项目有很大的影响。总之结合之前的项目经验,构建了如下的目录结构,当然其他的也没有问题,这里打算使用Mobx,所以将相关Mobx逻辑代码直接命名了Mobx文件夹。

Read more »

前言

之前已经学习过了Promise的相关知识,Promise其实就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。一般的Promise长这个样子:

1
2
3
4
5
6
7
8
9
10
11
12
13
const promise = new Promise((resolve, reject) => {
if(/* 一般是异步操作 */) {
resolve('回调');
} else {
reject('error');
}
});

promise.then((data) => {
console.log(data);
}).catch((error) => {
console.log(error);
});

下面尝试一下自己去实现Promise的功能。

Read more »