dva框架学习--Subscription订阅

先看下官方定义

Subscriptions 是一种从获取数据的方法,它来自于 elm。

Subscription 语义是订阅,用于订阅一个数据源,然后根据条件 dispatch 需要的 action。数据源可以是当前的时间、服务器的 websocket 连接、keyboard 输入、geolocation 变化、history 路由变化等等。

1
2
3
4
5
6
7
8
9
10
import key from 'keymaster';
...
app.model({
namespace: 'count',
subscriptions: {
keyEvent(dispatch) {
key('⌘+up, ctrl+up', () => { dispatch({type:'add'}) });
},
}
});

subscriptions要求内部所有成员都是函数.

Read More

vscode插件:正则表达式预览

曾一度对正则表达式望而却步,直到遇到了神器 https://regexper.com/

在使用时,经常遇到下面的场景:

  • 复制代码中的正则表达式,到网站中查看图形预览
  • 跳出代码编辑器,在网址中编写正则表达式并查看图形预览(新手向)
  • 网络抽风,神器打开很慢

既然使用了扩展性这么强的vscode,为什么不搞一个扩展呢?搜了一下还没有类似的,自己写一个(基于regexper-static)。

本文就是个预(guang)热(gao),需要的同学可以试用,关于开发记录会另开一篇文章。

预览功能

img

编辑功能

img

安装方法

  • 打开vscode,ctrl + p打开Quick Open并输入:
    ext install vscode-regexp-preivew

  • 或者直接在vscode扩展中搜索regexp preivew

链接

你可能不知道的try...finally

你(可能)不知道的系列,经典的you-dont-know-js读书笔记。

综述

finally分支的代码,无论如何都将被执行,并且是在try catch(如果有的话)完成后,在其他代码运行之前,立即执行。

在某种意义上,我们可以将在finally分支中的代码想象为一个回调函数,不管其他部分如何,这个回调函数总是会被执行。

特殊情况

上面综述大家一般都知道,但是在特殊情况下的执行流程呢?

这里指的特殊情况是指,存在改变函数执行流程的语句,比如return throw等。

Read More

多项目共享eslint-config

RN项目工程化之共享的eslint config

Lint

使用Lint对代码进行静态检查已经是前端工程化的标配了。

使用Lint,主要可以解决下面两个问题:

  1. 代码格式(用分号?不用分号?2个空格?3个空格?Tab? 个人喜好无所谓,在团队项目中,还是统一比较好)
  2. 为声明变量错误(是的,简单的类型检查,使用了未声明的变量是会被发现的)

Read More

React and Flow

React应用通常由嵌套的组件构成。随着应用的迭代,这些组件树和他们之间的依赖将会变得越来越复杂。

Flow的静态分析,能通过追踪检测propsstate的类型,保证基于React构建的大型应用的安全性。
Flow能够理解什么样的props是合法的,并支持默认属性。

定义React组件有三种方法:

  • React.createClass工厂方法
  • React.Component子类
  • 无状态的函数式组件

本文将讲述使用上面的三类方法时,如何定义强类型的组件,同时还会包括一个高阶组件(HOC)的例子。

Read More

使用vscode打造现代化的ReactNative开发环境

使用vscode打造现代化的RN开发环境

本文记录如何使用vscode打造一个现代化的RN开发环境,旨在提高开发效率和质量。

问题

  1. 代码没有提示:
    许多刚接触RN开发的非前端同学,都会问“哪个编辑器有智能提示?”。。。而对于前端同学来说,现在的日子已经好很多了,要什么自行车。

  2. 低级代码错误:
    这里的错误是指类似拼写错误,符号错误等。写完代码,跑起来各种报错,有时候费死劲的找,最后发现是个中文的分号问题。

解决办法

可选的方案大概有:

  1. 使用typescript: 直接使用有静态类型支持的js版本,but要再学习一套语法,而且我的代码都是ts写的,但很多好的公共库不是啊。
  2. 使用flow: 由于网络的原因,这个环境真的难配,同时也是要学习一些新的语法。

我们的选择:vscode + typings + eslint

Read More