react基本认知

一、如何配置react的开发环境

到react官网上下载文件,找不到的话可以直接点击这个链接 http://reactjs.cn/react/downloads.html

1.引入react核心库

1 <script type="text/javascript" src="react.js的文件路径"></script>

2.引入react的DOM操作

<script type="text/javascript" src="react-dom.js的文件路径"></script>

3.把JSX语法转换成浏览器能识别的JavaScript

<script type="text/javascript" src="browser.min.js的文件路径"></script>

二、什么是JSX,JSX如何使用

1. react使用JSX来替代常规的JavaScript,JSX是一个语法,不是一门新的语言。JSX是一个看起来很像XML的JavaScript语法的扩展,让你可以用HTML语法去写Javascript函数调用,我们不需要一定去使用JSX,单它由以下优点:

  (1)JSX执行更快,因为它在编译为JavaScript代码后进行了优化。

  (2)它的类型安全,在编译过程中就能发现错误

  (3)使用JSX编写模板更加简单快速

2. JSX如何使用

  (1) 直接在页面中编译JSX

<script type="text/babel"></script>

  (2).把JSX代码放在单独的一个文件上,在HTML中引入该文件

<script type="text/babel" src="需要引入的文件路径"></script>

三、什么是组件,如何封装一个组件

1.组件:在react中将一些重用的DOM结构进行封装就成了组件(component),一个组件就是一个组件类,首字母必须大写,用驼峰命名法。

2.如何封装一个组件:

 1 //构建一个组件类使用React.createClass()包含一个必须得方法是render,它可以给我们返回一个或一组能够渲染的DOM结构
 2 
 3 //创建一个组件,叫做HelloMessage,只包括一个h1
 4 var HelloMessage = React.createClass({
 5     render: function() {
 6         return <h1>hello message</h1>
 7     }
 8 })
 9 
10 //在react中输出多个同级标签,一定要加上父级
11 var HelloMessage = React.createClass({
12   render: function() {
13       return (
14           <div>
15              <h1>我是标题</h1>
16              <a href="###">百度</a>
17           </div>
18         )
19     }
20 })    
21 
22 ReactDOM.render(
23  <HelloMessage/>,
24  document.getElementById("container")
25 )

3.创建一个复合组件

/*
* 复合组件: 可以把多个组件相互组合,这就是复合组件
* */
/*
* 构建一个组件叫做WebShow
* 这个组件是由WebName和WebLink这两个组件组成
* WebName用h1表示,WebLink用a标签表示
 */
var WebName = React.createClass({ render: function() { return <h1>百度</h1> } }); var WebLink = React.createClass({ render: function() { return <a href="http://www.baidu.com">百度</a> } }); var WebShow = React.createClass({ render: function() { return ( <div> <WebName/> <WebLink/> </div> ) } }) ReactDOM.render( <WebShow/>, document.getElementById("container") )

4. react的css样式可以分为三类

  (1)内联样式

  (2)对象样式

  (3)选择器样式

    
//csss head里面style的样式设置
<style>
.act{
color: yellow;
background-color: #000;
}
</style>

//js中的代码
var
styles = {
        color: "blue",
        backgroundColor:"pink"
    }

    var StyleTest = React.createClass({
        render: function() {
            return (
                <div style={{backgroundColor:"red",borderWidth:"1px",borderColor:"green",borderStyle:"solid"}}>
                    <h1 style={styles}>我是标题</h1>
                    <p className="act">我是段落</p>
                </div>
            )
        }
    })

    ReactDOM.render(
        <StyleTest/>,
        document.getElementById("container")
    )

注意点:

  react的css样式中没有class,只有className

四、props是什么,如何使用,属性中的children是做什么的,如何设置默认属性

1. props: 表示的是一个组件的属性,实质上就是从父组件传递一些值到子组件上,一般情况下props最好不要更改

2.使用时this.props this代表父组件,props是一个数组,包含了父组件上的所有属性,并且与父组件上的属性一一对应

3.this.props.children的返回值会根据子节点的数量放回undefined,object, array。所以react提供了一个react.children的方法专门处理this.props.children

4.设置默认属性:用propType:{设置props的数据类型},用getDefaultProps: function(){设置该组件的初始属性}

//在WebShow上添加两个属性wname和wlink
//在WebName上有一个属性webname
//在WebLink上有一个属性weblink
var WebName = React.createClass({
        render: function() {
            return <h1>{this.props.webname}</h1>
        }
    });

 var WebLink = React.createClass({
   render: function() {
   return <a href={this.props.weblink}>{this.props.weblink}</a>
   }
 });

  var WebShow = React.createClass({
    render: function() {
        return (
            <div>
             <WebName webname={this.props.wname}/>
               <WebLink weblink={this.props.wlink}/>
            </div>
         )
       }
  })

  ReactDOM.render(
    <WebShow wname="百度" wlink="http://www.baidu.com"/>,  document.getElementById("container") )

设置默认属性

var PropsTest = React.createClass({
        propTypes:  {
            //设置props的数据类型
            age: React.PropTypes.number.isRequired
        },
        getDefaultProps: function() {
            //设置该组件属性的初识值
            return {
                name:"李四",
                age: 38
            }
        },
        render: function () {
            return <h1>hello {this.props.name}!年龄是{this.props.age}</h1>
        }
    });

//    var age = 18;
    ReactDOM.render(
//      <PropsTest name="zhangsan"/>
        <PropsTest/>,
        document.getElementById("container")
    )

五、state是什么?如何使用

1.组件免不了要与用户互动,React的一大创新就是将组件看成是一个状态机。通过与用户的交互实现不同状态,然后渲染UI,让用户界面和数据保持一致。在React里,只需要更新组件的state,然后根据新的state重新渲染用户界面

2.组件的7个方法:

  设置状态:setState

  替换状态:replaceState

  设置属性:setProps

  替换属性:replaceProps

  强制更新:forceUpdate

  获取DOM节点:getDOMNode

  判断组件挂载状:isMounted

六、组件的生命周期

//以下实例在 Hello 组件加载以后,通过 componentDidMount 方法设置一个定时器,每隔100毫秒重新设置组件的透明度,并重新渲染:

var
Hello = React.createClass({ getInitialState: function () { return { opacity: 1.0 }; }, componentDidMount: function () { this.timer = setInterval(function () { var opacity = this.state.opacity; opacity -= .05; if (opacity < 0.1) { opacity = 1.0; } this.setState({ opacity: opacity }); }.bind(this), 100); }, render: function () { return ( <div style={{opacity: this.state.opacity}}> Hello {this.props.name} </div> ); } }); ReactDOM.render( <Hello name="world"/>, document.body );
//以下实例初始化 state , setNewnumber 用于更新 state。所有生命周期在 Content 组件中。
var Button = React.createClass({
  getInitialState: function() {
    return {
      data:0
    };
  },
  setNewNumber: function() {
    this.setState({data: this.state.data + 1})
  },
  render: function () {
      return (
         <div>
            <button onClick = {this.setNewNumber}>INCREMENT</button>
            <Content myNumber = {this.state.data}></Content>
         </div>
      );
    }
})
var Content = React.createClass({
  componentWillMount:function() {
      console.log('Component WILL MOUNT!')
  },
  componentDidMount:function() {
       console.log('Component DID MOUNT!')
  },
  componentWillReceiveProps:function(newProps) {
        console.log('Component WILL RECEIVE PROPS!')
  },
  shouldComponentUpdate:function(newProps, newState) {
        return true;
  },
  componentWillUpdate:function(nextProps, nextState) {
        console.log('Component WILL UPDATE!');
  },
  componentDidUpdate:function(prevProps, prevState) {
        console.log('Component DID UPDATE!')
  },
  componentWillUnmount:function() {
         console.log('Component WILL UNMOUNT!')
  },
 
    render: function () {
      return (
        <div>
          <h3>{this.props.myNumber}</h3>
        </div>
      );
    }
});
ReactDOM.render(
   <div>
      <Button />
   </div>,
  document.getElementById('example')
);

  

原文地址:https://www.cnblogs.com/qqm16113/p/6690938.html