react 基础语法

1.可以在js里面不加引号直接写html

  var vDom = <div id="demo">Hello, React!</div>;  //不是字符串, 不能加引号

2. ReactDOM.render(vDom, containDiv);  第一个参数为虚拟DOM,后一个为真实容器

  render 把虚拟DOM 变为真实的dom,然后再插入

3.React能自动遍历显示数组中所有的元素(遍历数组的时候要有Key 唯一标识)

   array.map()的使用

 map 返回一个数组 而React正好可以自动遍历数组元素

<ul>{names.map((item, index)=><li key={index}>{item}</li>)}</ul>

JSX语法 

 var ele = <h1>Hello JSX!</h1>;
* 注意1: 它不是字符串, 也不是HTML/XML标签
* 注意2: 它最终产生的就是一个JS对象

标签中的js代码必须用{}包含
<h1 id='myTitle'>{title}</h1>

4. 定义组件

        //方式1: 工厂(无状态)函数(最简洁, 推荐使用)

    function MyComponent1() {

      return <h1>自定义组件标题11111</h1>
    }
    //方式2: ES6类语法(复杂组件, 推荐使用)
    class MyComponent3 extends React.Component {
      render () {
        return <h1>自定义组件标题33333</h1>
      }

    }

class MyComponent2 extends React.Component {
    render() {
      console.log(this, this instanceof MyComponent3);
      return <h1>ES6类语法--->自定义组件标题22222</h1>;
    }
  }

思想:把render方法放在React.Component上,new一个实例的时候调用React.Component上的构造方法,调用render函数的是MyComponent2 这个实例对象

2). 渲染组件标签
    ReactDOM.render(<MyComponent/>, document.getElementById('example'));
注意:
  1). 返回的组件类必须首字母大写(和原生的html标签区别开来 原生HTML标签没有大写
  2). 虚拟DOM元素必须只有一个根元素

  3). 虚拟DOM元素必须有结束标签

3. ReactDOM.render()渲染组件标签的基本流程
  1). React内部会创建组件实例对象 
  2). 得到包含的虚拟DOM并解析为真实DOM(会把原来的真实DOM中的东西覆盖)

  3). 插入到指定的页面元素内部

实例对象的三大属性:

ES6把方法的定义放到了原型上 以便代码复用

把构造函数放在实例中 创建实例的时候再调用原型上的构造方法



属性限制  并且只要Props有数据 那么它就是外部传入进来的,因为只读



传数据的时候可以   ...  运算符


拆分组件 通常最外面 就是应用主组件APP 内层再写 


工厂函数的this统一指向undefined


可以使用声明式依赖注入



refs 属性

1. 组件实例对象的3大属性之二: refs属性
  1). 组件内的标签都可以定义ref属性来标识自己
  2). 在组件中可以通过this.refs.refName来得到对应的真实DOM对象
  3). 作用: 用于操作指定的ref属性的dom元素对象(表单标签居多)
    * <input ref='username' />
    * this.refs.username //返回input对象
2. 事件处理
  1). 通过onXxx属性指定组件的事件处理函数
(注意大小写)
    * React使用的是自定义(合成)事件, 而不是使用的DOM事件
    * React中的事件是通过委托方式处理的(委托给组件最外层的元素)
  2). 通过event.target得到发生事件的DOM元素对象
    <input onFocus={this.handleClick}/>
    handleFocus(event) {
      event.target  //返回input对象
    }
3. 强烈注意
  1). 组件内置的方法中的this为组件对象
  2). 在组件中自定义的方法中的this为null
    * 强制绑定this

    * 箭头函数(ES6模块化编码时才能使用)

注意在书写的时候input在JSX中一定要有结束标签


特点 :render()方法中的this指向的是实例对象

而自定义的方法中的this 为null



  refs 以及事件绑定

class RefsTest extends React.Component {
  constructor (props) {
   super(props);

    this.showMsg = this.showMsg.bind(this); // 强制给showMsg()绑定this(组件对象)
    this.handleBlur = this.handleBlur.bind(this);
  }

  showMsg() {
    // console.log(this); //this默认是null, 而不组件对象
    const input = this.refs.msg;
    alert(input.value);
  }

  handleBlur(event) {
    const input = event.target;
    alert(input.value);
  }

  render () {
    return (
      <div>
        <input type="text" ref="msg"/>
        <button onClick={this.showMsg}>提示输入数据</button>
        <input type="text" placeholder="失去焦点提示数据" onBlur={this.handleBlur}/>
      </div>
    );
  }
}

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

脚手架可以这样子写 箭头函数



state



 拆分组件的时候要以功能来拆分

state props区别:

1 state是内部数据,可以变化

2 props是外部数据,不可变化


组件生命周期: 组件只渲染一次,而没有重复挂载

    componentWillMount() {
      console.log('componentWillMount(): 将要初始挂载');
    }

发送Ajax请求可以在这两个当中发。写在componentWillMount()中,优点:可以避免挂载完成了,还没有数据显示。

缺点:由于得等待componentWillMount()完成后才能render(),所以当里面写太多任务时,会由于等待超时,渲染不成功。

    

componentDidMount() {

      console.log('componentDidMount(): 已经初始挂载');
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值