React的基础入门

一、客户端引入React库

react在0.14版本时,将库拆封成了两个部分:react.js和react-dom.js。

  • react.js中包含 React.createElement、 .createClass、 .Component, .PropTypes, .Children 这些 API,主要用来创建组件。
  • react-dom.js中包含 ReactDOM.render、 .unmountComponentAtNode、 .findDOMNode,主要用来将节点渲染到节点,以及找到真实的DOM节点。
<script type="text/javascript" src="../js/react.min.js"></script>
<script type="text/javascript" src="../js/react-dom.min.js"></script>
<script type="text/javascript" src="../js/browser.min.js"></script>

其中browser主要用来转义jsx语法,还有将es6转义成es5。


二、jsx语法

简单来说就是将js与html进行了混合。

demo:

var style = {
    color: 'red',
    border: '1px #000 solid',
    lineHeight: '50px'
};
var HelloMessage = React.createClass({
    render: function() {
        return <div style={style}>Hello {this.props.name || 'React'}</div>;
    }
});

ReactDOM.render(<HelloMessage name="World" />,document.body);

三、React组件的生命周期

1、初始化阶段
var HelloWorld = React.createClass({
    getDefaultProps: function(){//只调用一次,实例之间共享引用
        console.log('getDefaultProps,1');
        return {name: 'Tom'};
    },
    getInitialState: function(){//初始化每个实例特有的状态
        console.log('getInitialState,2');
        return {myCount: count++, ready: false};
    },
    componentWillMount: function(){//render之前最后一次修改状态
        console.log('componentWillMount,3');
        this.setState({ready: true});
    },
    render: function() {//只能访问this.props和this.state,只有一个顶层组件,不允许修改状态和DOM输出
        console.log('render,4');
        return <p>Hello {this.props.name || 'World'} <br /> {''+this.state.ready} <br /> {'  '+this.state.myCount+'  '}</p>
    },
    componentDidMount:function(){//成功render并渲染完成真实DOM之后触发,可以修改真实的DOM
        console.log('componentDidMount,5');
        $(ReactDOM.findDOMNode(this)).append('surprise!');
    }
});
2、运行中阶段
var HelloWorld = React.createClass({
    componentWillReceiveProps: function(newProps) {
        console.log('componentWillReceiveProps, 1');
        console.log(newProps);
    },
    shouldComponentUpdate: function() {
        console.log('shouldComponentUpdate, 2');
        return true;
    },
    componentWillUpdate: function(){
        console.log('componentWillUpdate, 3');
    },
    render: function() {//只能访问this.props和this.state,只有一个顶层组件,不允许修改状态和DOM输出
        console.log('render,4');
        return <p>Hello {this.props.name || 'World'} <br/></p>
    },
    componentDidUpdate:function(){//组件更新完后调用
        console.log('componentDidUpdate, 5');
        $(ReactDOM.findDOMNode(this)).append('surprise!');
    }
});
3、销毁阶段
var HelloWorld = React.createClass({
    render: function() {//只能访问this.props和this.state,只有一个顶层组件,不允许修改状态和DOM输出
        console.log('render,4');
        return <p>Hello {this.props.name || 'World'} <br/></p>
    },
    componentWillUnmount:function(){
        console.log('BOOOOOOOOOOOOOOM!');
    }
});

四、组件的属性与状态

属性: this.props,

一个事物的性质与关系。
属性是不可以由自己修改的,是父组件调用该组件或者创建实例时传递进来的。

给一个组件传递属性的三种方法:

1、通过键值对的方式

<New name={'Jack'}></New>

大括号中是一段js执行代码,可以使数字、字符串基本数据,也可以是三元表达式或者异或运算。

2、通过react语法糖(…)展开一个对象

var  properties = {name: 'Jack', age: 18};
<New {...properties}></New>

…的运算符号能将一个对象进行展开,相当于拿到了properties对象中的两个属性赋给该组件。

3、使用setProps方法,该方法不建议使用,不能再组件内部修改属性,这违背了组件设计的原则

var instacne = ReactDOM.render(<New />,document.body);
instance.setProps({name: 'Jack'});

在最新的React版本15中,setProps已经被弃用。

状态:this.state,

事物所处的状况。状态是由事物自行处理的,不断变化的,是一个事物的私有属性。

与状态有关的方法:
- getInitialState: 初始化每个实例特有的状态。
- setState:更新组件的状态。使用setState会调用diff算法。

属性与状态异同:

相似点:
- 都是JS纯对象
- 都会触发render更新
- 都具有确定性

不同点:

属性状态
是否从父组件获取初始值
是否由父组件修改
是否在组件内部设置默认值
是否在组件内部修改
是否设置子组件的初始值
是否修改子组件的值

状态和属性都会触发render更新,都是纯JS对象。
- 状态:组件状态只和自己相关,既不受父组件也不受子组件影响
- 属性:组件不能修改属性,只能从父组件获取属性,父组件也能修改它的属性

根本的区别:组件在运行时需要修改的数据就是状态。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值