Javascript

ES6 拾遗(3)

Submitted by Lizhe on Thu, 06/21/2018 - 15:45

Promise 对象

所谓promise, 简单来说是一个容器, 里面保存着某个未来才会结束的事件

有 3 种状态 Pending 进行中, Fulfilled 已成功, Rejected 已失败

ES6规定, Promise对象是一个构造函数, 用来生成Promise实例.

function test(){

  let value = "hello world";

  var promise = new Promise(

    function(resolve,reject){

      if(true){

        resolve(value)

      }else{

        reject(value)

      }

    }

  );

}

ES6 拾遗(2)

Submitted by Lizhe on Thu, 06/21/2018 - 10:37

 

1. 函数参数的默认值

在ES6 之前, 不能直接为函数的参数指定默认值, 只能采用变通的办法

20180621104353

上面代码的缺陷在于如果name被赋值为false或者""则默认值会生效

ES6中可以直接为参数赋默认值,并且默认值只有在参数值为undefined时才会生效, null和"" 不会造成影响

ES6 拾遗(1)

Submitted by Lizhe on Wed, 06/20/2018 - 17:03

 

 

1. let const 不存在变量提升

2. let const 绑定到块级作用域

3. ES6 允许块级作用域无限叠加

4. ES5 中的函数只能在顶层作用域和函数作用域之中声明,不能在块级作用域中声明

5. ES6 中明确允许在块级作用域之中声明函数. ES6规定, 在块级作用域之中声明的函数在块级作用域之外不可用(类似于let)

实际情况中为了兼容旧代码

允许在块级作用域内声明函数

声明类似var, 仍然会提升到全局作用域或函数作用域的头部

同时, 函数声明还会提升到所在的块级作用域的头部

考虑到环境导致的行为差异太大, 应该避免在块级作用域内声明函数.

如果确实需要, 也应该写成函数表达式的形式

 

函数声明语句

{

 

let a = “ message “;

function f() {

return a;

}

}

 

函数表达式

Nodejs IDE

Submitted by Lizhe on Wed, 06/20/2018 - 16:14

 

https://code.visualstudio.com/

https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode

react-intl

Submitted by Lizhe on Thu, 06/14/2018 - 15:36

Internationalize React apps. This library provides React components and an API to format dates, numbers, and strings, including pluralization and handling translations.

react intl 用于格式化日期, 数字, 字符串多元化和翻译(实际上可以用做国际化)

安装

$ npm install react-intl --save

 

 

Formik 总结

Submitted by Lizhe on Thu, 06/14/2018 - 09:44

以下内容总结自Formik的官方文档, 所以你会看到一些原文引用(当然是我过滤后的)

Overview

Formik 总的来说帮助我们做下面3件事

  1. Getting values in and out of form state
  2. Validation and error messages
  3. Handling form submission

 

Why not Redux-Form?

总的来说, redux form提供的东西太重了, 过多的reducer, 而且通常情况下我的Form值并不需要保存在redux的state中

My goal with Formik was to create a scalable, performant, form helper with a minimal API that does the really really annoying stuff and leaves the rest up to you.

 

Formik 使用以下3个event handlers

react-testing-library

Submitted by Lizhe on Mon, 06/11/2018 - 16:27

任意目录下的 *.test.js

__tests__ 目录下的 *.js

 

import React from 'react'
import {renderIntoDocument, cleanup} from 'react-testing-library'
import App from '../App'
import * as jestDom from 'jest-dom'

expect.extend(jestDom)

afterEach(cleanup)

React ES6 优化笔记

Submitted by Lizhe on Mon, 06/11/2018 - 08:29

以下内容为最近一段时间使用React的优化笔记

1. 使用解构传递参数

const AddPlayerForm = ({ values, onSubmit, onChange }) => {

    return (...)

}

2. promise函数中不一定要使用_this


          .then(response => {
              if(this.isMountedDone) {
                  this.setState({
                      options: response.data
                  });
              }

3.     Stop Memory Leaks with componentWillUnmount Lifecycle Method in React

React browserHistory.push 传参

Submitted by Lizhe on Tue, 03/27/2018 - 16:03

传参方式1:

将参数直接写在路径中,前提是router定义时,需要指定参数的名字,这里假定为:value;

browserHistory.push(pathname: '/routerName/123');

如何获取到123呢?

通过this.props.params.value即可获取

传参方式2:

通过state传参,可以在页面跳转时,url中不显示参数;

browserHistory.push(pathname: '/routerName',state: { key: value });

跳转界面如何接收参数呢?

this.props.location.state.key便可以获得state中的key的value;

 

尝试了第二种方式发现不好用, 可能是router版本更新到4之后网上的内容太旧了

经过推敲之后发现可以这样