1). 技巧
- Live reload 太爽啦!!!!
 
- 代码自动补全
 
webstorm -> settings -> live templates
设置自动代码补全如下:
1 2 3 4 5 6 7 8 9 10 11
   | import React, {Component} from 'react'
  export default class $className$ extends Component {     render (){         return (         <div>                  </div>         )     } }
  | 
 
2). 注意事项
- 咋导入svg图片不能直接导入啊?!, 得这样
 
1 2 3
   | import logo from '../logo.svg'
     <img className="logo" src={logo} alt="logo"/>
   | 
 
- jsx 必须要有标签的结束符
 
比如 input 标签在html 中可能省略 /
1 2
   |  <input type="text" class="form-control" placeholder="用户名" /> <img src="..." className="card-img-top" alt="..."/>
   | 
 
- jsx 中必须使用className, 而不是class!
 
原因
- jsx中不能使用style=’display: none’ 的形式, 必须使用style={(display: ‘none’)}
 
解释: 其中第一层{}表示是js代码, 第二层{}表示是对象, ‘none’表示是字符串
- 自定义的MyComponent一定要是组件&标签 首字母大写, 否则不会被渲染!!!
 
1 2 3 4 5
   | import CommentAdd from "../comment-add/comment-add"; import CommentList from "../comment-list/comment-list";
  <CommentAdd /> <CommentList />
   | 
 
- 使用props属性时, 需要导入
prop-types库 
1 2 3 4 5 6 7 8 9 10 11
   | import PropTypes from 'prop-types';
  TodoAdd.propTypes = {       add: PropTypes.func.isRequired,       count: PropTypes.number.isRequired     }
 
  static propTypes ={         comments: PropTypes.array.isRequired     }
   | 
 
- 使用ref属性将外部输入导入组件属性时, 注意使用this.input.value  !
 
1 2 3
   | <input type="text" ref={e=> this.user=e} className="form-control" placeholder="用户名" />         this.props.addcomment(this.user.value,this.text.value);
  | 
 
- 不用每次bind this, 简便写法: 声明组件内自定义函数, 采用箭头函数:
 
1 2 3 4
   | userChange = (event) =>{     const author = event.target.value;     this.setState({author}) }
  | 
 
有点奇怪,  组件内的函数, 咋似乎不用声明, 可以直接写内容??? 似乎在对象中增加属性也是一样的?
- 此外{author}是新的ES6语法, 等同于{author: author}
 
- 对于form标签注意:
1. 不要放在p标签下  
- handle函数中增加 event.preventDefault() // 阻止事件的默认行为: 提交表单会刷新网页