React响应式和组件化开发初体验-TodoList

120 阅读4分钟

yarn和npm常用命令

yarn add <package...>
这将安装您的dependencies中的一个或多个包。

yarn add <package...> [--dev/-D]
用 --dev 或 -D 会在 devDependencies 里安装一个或多个包。

npm install 作为 npm 最重要的功能和最常用的功能,不用过多说明,这里只介绍三个非常有用的选项--global,--save,--save-dev。

想必读者肯定知道--global 可以简写成-g,其实另外两个选项也有简写形式,--save 可以简写成-S,--save-dev 可以简写成-D,注意大写。

npm config get registry  // 查看npm当前镜像源

npm config set registry https://registry.npm.taobao.org/  // 设置npm镜像源为淘宝镜像

yarn config get registry  // 查看yarn当前镜像源

yarn config set registry https://registry.npm.taobao.org/  // 设置yarn镜像源为淘宝镜像

yarn upgrade //升级包

yarn start //启动项目

ES6解构赋值

import React from 'react'

import {Component} from 'react'

等于

import React from 'react'

Const Component = React.Component

前面已经导入了react模块(组件)中的默认组件,并且命名为React

'react'是导出的一个对象也就是ReactComponent是这个对象的一个属性

React语法

JSX中注释也应写在{}中,会被视为一个标签。

用JSX必须引入React才能编译(看上去好像HTML)

使用组件,组件必须以大写开头,大写就是组件。

在JSX中为避免歧义,用className代替class,用htmlFor代替label标签的for属性,与input标签的id属性对应(扩大点击范围,自动聚焦到输入框)。

给标签绑定事件onclick要写成onClick={func},

在标记中绑定内联事件响应函数时需要()而此处不需要。

func在class中定义,数据在class的constructor中的this.state作为对象声明,如果要在方法中访问this.state需要使用bind绑定this,可以在constructor中绑定以提高性能this.handleInputChange = this.handleInputChange.bind(this);

在render方法中使用JSX语法,return类似HTML的代码块,方法和数据都通过{}语法访问,数据必须通过this.state得到,render中return的代码块只能有一个根元素,可以使用 占位标签,需要通过`import { Fragment } from 'react'引入。

dangerouslySetInnerHTML直接写html内容可能被XSS攻击,赋值一个对象{{}},里面用__html:data

通过数组的map方法,在里面的箭头函数里return HTML标签(JSX元素)进行列表渲染

通过this.setState进行视图更新,可以传入一个对象也可以传入一个箭头函数(实现异步),箭头函数接收一个参数prevState是上一次同步的数据,箭头函数返回一个对象。

父组件通过属性向子组件传递值和方法,子组件通过this.props接收,可以通过调用父组件传递的方法传递值和修改父组件的数据(需要在父组件中预先绑定this)。 const { deleteItem,index } = this.props;通过解构赋值取出需要的内容

JS语法

把大括号{放在一行的结尾而不是下一行的开头,因为它会避免在JavaScript的return语句中的一个可怕的设计错误。自动补分号导致返回undefined。

事件响应函数接收一个事件对象e,e.target就是事件对应的DOM元素。

扩展运算符(spread)是三个点(...)。它好比 rest 参数的逆运算,可以使用扩展运算符进行拷贝数组[...array]

rest 参数搭配的变量是一个数组,该变量将多余的参数放入数组中。

箭头函数

如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用return语句返回。

由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号,否则会报错。

return()无效

return {} 返回一个对象字面量

propTypes和defaultProps进行Typetest和设置接收的props的默认值

TodoItem.propTypes = {
  test:PropTypes.string.isRequired,
  content: PropTypes.arrayOf(PropTypes.string,PropTypes.number),
  deleteItem: PropTypes.func,
  index: PropTypes.number
}

TodoItem.defaultProps ={
  test:'hello world'
}