zoukankan      html  css  js  c++  java
  • 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')
    );

      

  • 相关阅读:
    寒假学习(九)
    寒假学习(八)利用Sqoop导出Hive分析数据到MySQL库
    寒假学习(七)热词统计
    寒假学习(六)统计学生成绩
    寒假学习(五)模拟图形绘制
    寒假学习(四)编写MapReduce程序清洗信件内容数据
    寒假学习(三)北京市政百姓信件分析
    实现地图输出的相关知识
    使用Node.js+Socket.IO搭建WebSocket实时应用
    centos6 安装python3.5后pip无法使用的处理
  • 原文地址:https://www.cnblogs.com/qqm16113/p/6690938.html
Copyright © 2011-2022 走看看