react婴儿_notes

视频地址: https://haoqicat.com/react-baby/1-react-show
第二版:https://haoqicat.com/react-baby-v2
其他教程:http://www.ruanyifeng.com/blog/2015/03/react.html

  1. react 是用来写UI的前端JS库

  2. 组件化:

  • 独立完成任务
  • 组件要足够小
  • 不按技术类型分离,而要按功能模块分离
  • 对外接口要明晰
  • 高内聚:完成一个功能的代码尽量放到一个文件中
  • 低耦合:我们的正常运行不依赖于其他组件
  1. Bable is a JavaScript compiler
    (ES6, JSX)

  2. 外来数据要流入 React 组件内部,props 属性就是入口。

  3. 由于箭头函数中this的特殊性,所以在React.creatClass()中不要使用箭头函数

  4. React组件生命周期


    React组件生命周期.png
  5. JSX 允许直接在模板插入 JavaScript 变量。如果这个变量是一个数组,则会展开这个数组的所有成员。

  6. 添加组件属性,有一个地方需要注意,就是 class 属性需要写成 className ,for 属性需要写成 htmlFor ,这是因为 class 和 for 是 JavaScript 的保留字。

  7. this.props.children 的值有三种可能:如果当前组件没有子节点,它就是undefined;如果有一个子节点,数据类型是object;如果有多个子节点,数据类型就是array。所以,处理this.props.children的时候要小心。React 提供一个工具方法React.Children来处理this.props.children。我们可以用React.Children.map来遍历子节点,而不用担心this.props.children的数据类型是undefined还是object

  8. 组件类的PropTypes属性,就是用来验证组件实例的属性是否符合要求

  9. getDefaultProps & getInitialState
    由于 this.props 和 this.state 都用于描述组件的特性,可能会产生混淆。一个简单的区分方法是,this.props 表示那些一旦定义,就不再改变的特性,而 this.state 是会随着用户互动而产生变化的特性。

  10. 获取真实的DOM节点
    组件并不是真实的 DOM 节点,而是存在于内存之中的一种数据结构,叫做虚拟 DOM (virtual DOM)。只有当它插入文档以后,才会变成真实的 DOM 。根据 React 的设计,所有的 DOM 变动,都先在虚拟 DOM 上发生,然后再将实际发生变动的部分,反映在真实 DOM上,这种算法叫做DOM diff,它可以极大提高网页的性能表现。但是,有时需要从组件获取真实 DOM 的节点,这时就要用到ref属性


var MyComponent = React.createClass({
  handleClick: function() {
    this.refs.myTextInput.focus();
  },
  render: function() {
    return (
      <div>
        <input type="text" ref="myTextInput" />
        <input type="button" value="Focus the text input" onClick={this.handleClick} />
      </div>
    );
  }
});

ReactDOM.render(
  <MyComponent />,
  document.getElementById('example')
);

上面代码中,组件MyComponent的子节点有一个文本输入框,用于获取用户的输入。这时就必须获取真实的 DOM 节点,虚拟 DOM 是拿不到用户输入的。为了做到这一点,文本输入框必须有一个ref属性,然后this.refs.[refName]就会返回这个真实的 DOM 节点。需要注意的是,由于this.refs.[refName]属性获取的是真实 DOM ,所以必须等到虚拟 DOM 插入文档以后,才能使用这个属性,否则会报错。上面代码中,通过为组件指定Click事件的回调函数,确保了只有等到真实 DOM 发生Click事件之后,才会读取this.refs.[refName]属性。React 组件支持很多事件,除了Click事件以外,还有KeyDownCopyScroll等,完整的事件清单请查看官方文档

  1. 表单
    用户在表单填入的内容,属于用户跟组件的互动,所以不能用this.props读取

var Input = React.createClass({
  getInitialState: function() {
    return {value: 'Hello!'};
  },
  handleChange: function(event) {
    this.setState({value: event.target.value});
  },
  render: function () {
    var value = this.state.value;
    return (
      <div>
        <input type="text" value={value} onChange={this.handleChange} />
        <p>{value}</p>
      </div>
    );
  }
});

ReactDOM.render(<Input/>, document.body);

上面代码中,文本输入框的值,不能用this.props.value读取,而要定义一个onChange事件的回调函数,通过event.target.value读取用户输入的值。textarea元素、select元素、radio元素都属于这种情况,更多介绍请参考官方文档

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • It's a common pattern in React to wrap a component in an ...
    jplyue阅读 8,518评论 0 2
  • 3. JSX JSX是对JavaScript语言的一个扩展语法, 用于生产React“元素”,建议在描述UI的时候...
    pixels阅读 7,915评论 0 24
  • 自己最近的项目是基于react的,于是读了一遍react的文档,做了一些记录(除了REFERENCE部分还没开始读...
    潘逸飞阅读 8,936评论 1 10
  • 喜爱石头。不管路边、山上、河里只要是石头,我都愿低下头,仔细寻觅心仪的宝贝。 此时我暂住的小院里,堆满了从各地捡回...
    于新源阅读 3,811评论 1 4
  • 一二线城市房价受到政策打压,依旧保持着较高的价格。除了购房意愿足够强之外,也是因为比起痛苦的攒钱买房,租房实在是更...
    圈子账本君阅读 2,578评论 4 1