L01-React基础(项目+知识点总结)


1_Hello World — React


 

官网文档:Hello World – React

    <div id="root"></div>

    <script type="text/babel">
      // jsx语法:react提供的语法   javascript+xml语法

      // 参数1:页面要展示的信息
      // 参数2:要渲染内容的位置
      ReactDOM.render(
        <div>Hello React!</div>,
        document.getElementById("root")
      );

    </script>

知识点:

  1. React:用于构建用户界面的 JavaScript 库。
    最开始,很多人说React是MVC中的V,总结React就是一套为视图而准备的js框架
    React由facebook打造的,致力于更快的DOM渲染和更易于维护的DOM层
  2. JSX:是一个 JavaScript 的语法扩展。
    官方建议在 React 中配合使用 JSX,JSX 可以很好地描述 UI 应该呈现出它应有交互的本质形式。JSX 可能会使人联想到模版语言,但它具有 JavaScript 的全部功能。

2_JSX语法解析


官网文档:JSX 简介 – React

    <div id="root"></div>

    <script type="text/babel">
      /*
        jsx语法:
          遇到{}按照js语法解析
          遇到<>按照xml语法即系

          每一个列表元素需要指定一个key最为唯一元素的索引
      */

      var arr = ["iwen","ime","frank"];
      ReactDOM.render(
        <ul>
          {
            arr.map(function(item,index){
              return <li key={index}>{ item }</li>
            })
          }
        </ul>,
        document.getElementById("root")
      )

    </script>
<div id="root"></div>
    
<script type="text/babel">
      function tick(){
        var current = (
          <div>
            <h3>当前时间</h3>
            <p>{ new Date().toLocaleTimeString() }</p>
          </div>
        )
        ReactDOM.render(current,document.getElementById("root"))
      }
      
      setInterval(tick,1000);
</script>


知识点:

  1. Babel 会把 JSX 转译成一个名为 React.createElement() 函数调用。
    React.createElement会预先执行一些检查,以帮助你编写无错代码
  2. JSX:能够防止注入攻击
    React DOM 在渲染所有输入内容之前,默认会进行转义。它可以确保在你的应用中,永远不会注入那些并非自己明确编写的内容。所有的内容在渲染之前都被转换成了字符串。这样可以有效地防止 XSS(cross-site-scripting, 跨站脚本)攻击。
    


 3_React基础组件


官网文档:组件 & Props – React

    <div id="root"></div>

    <script type="text/babel">
      /*
        组件:
          在React中,整体是一个组件化设计
          注意:组件的首字母必须大写
      */

      var Hello = React.createClass({
        render:function(){
          return(
            <div>Hello World!</div>
          )
        }
      })

      ReactDOM.render(<Hello />,document.getElementById("root"))
    </script>


知识点:

  1. CreateClass函数在v15的版本存在,v16的版本去掉了

4_React组件嵌套


官网文档:组件 & Props – React

    <div id="root"></div>

    <script type="text/babel">
      /*
        组件:
          组件中只能存在一个根容器
          组件与组件之间可以互相嵌套
          组件本身可以具有业务逻辑
      */
      var LeftNav = React.createClass({
        render:function(){
          var navArr = ["百度","谷歌","bing"]
          return(
            <div>
              <ul>
                {
                  navArr.map(function(item,index){
                    return(
                      <li key={index}><a href="#">{ item }</a></li>
                    )
                  })
                }
              </ul>
            </div>
          )
        }
      })

      var RightNav = React.createClass({
        render:function(){
          return(
            <div>
              <ul>
                <li><a href="#">新闻</a></li>
                <li><a href="#">地图</a></li>
                <li><a href="#">视频</a></li>
              </ul>
            </div>
          )
        }
      })


      var Root = React.createClass({
        render:function(){
          return(
            <div>
              <LeftNav />
              <RightNav />
            </div>
          )
        }
      })

      ReactDOM.render(<Root />,document.getElementById("root"))

    </script>

5_组件数据交互props


官网文档:组件 & Props – React

    <div id="root"></div>

    <script type="text/babel">

      /*
        组件数据交互:参数的传递
          props
          this.props.title
          组件交互中的数据传递
      */

      var Hello = React.createClass({
        render:function(){
          return(
            <div>
              { this.props.title }
              <Demo demo="你是dmeo" />
            </div>
          )
        }
      })

      var Demo = React.createClass({
        render:function(){
          return(
            <div>{ this.props.demo }</div>
          )
        }
      })

      ReactDOM.render(<Hello title="hello component" />,document.getElementById("root"))

    </script>
   <div id="root"></div>

    <script type="text/babel">

      /*
        组件:
          组件中只能存在一个根容器
          组件与组件之间可以互相嵌套
          组件本身可以具有业务逻辑
      */

      var Nav = React.createClass({
        render:function(){
          return(
            <div>
              <ul>
                {
                  this.props.navData.map(function(item,index){
                    return(
                      <li key={index}><a href="#">{ item }</a></li>
                    )
                  })
                }
              </ul>
            </div>
          )
        }
      })

      var Root = React.createClass({
        render:function(){
          var nav1 = ["百度","谷歌"]
          var nav2 = ["新闻","地图"]
          return(
            <div>
              <Nav navData={nav1}/>
              <Nav navData={nav2}/>
            </div>
          )
        }
      })

      ReactDOM.render(<Root />,document.getElementById("root"))

    </script>

 6_样式添加与事件


官网文档:事件处理 – React

  <style>
      .container{
        color: red;
      }

  </style>
  
  <body>

    <div id="root"></div>
    <script type="text/babel">

      /*
        在React中,className,class是es6的关键字,es5中同样是保留关键字
        行内样式:style={{color:'green',fontSize:"30px"}}
      */

        var Hello = React.createClass({
          render:function(){

            var styleObj = {
              color:'green',
              fontSize:"30px"
            }

            return(
              <div className="container">
                <p>哈哈</p>
                <span style={ styleObj }>hello</span>
              </div>
            )
          }
        })

        ReactDOM.render(<Hello />,document.getElementById("root"))

    </script>

  </body>
    <div id="root"></div>
    
    <script type="text/babel">
      var Hello = React.createClass({
  
        handlerClick:function(event){
          console.log("2222");
        },
  
        render:function(){
          return(
            <div>
              <button onClick={ this.handlerClick }>按钮</button>
            </div>
          )
        }
      })
      ReactDOM.render(<Hello />,document.getElementById("root"))
      
    </script>

知识点:

  1. React DOM 使用 camelCase(小驼峰命名)来定义属性的名称。
    因为 JSX 语法上更接近 JavaScript 而不是 HTML,所以不使用 HTML 属性名称的命名约定。
    例如,JSX 里的 class 变成了 className,而 tabindex 则变为 tabIndex。
  2. preventDefault 阻止默认行为
    在 React 中另一个不同点是你不能通过返回 false 的方式阻止默认行为。你必须显式的使用 preventDefault
    
    

7_React state状态


官网文档:State & 生命周期 – React事件处理 – React

    <div id="root"></div>
    
    <script type="text/babel">

      /*
        state:组件内部的状态
        props:组件之间的数据交互
      */

      var Hello = React.createClass({

        // 初始化state  getInitialState:固定的
        getInitialState:function(){
          return{
            value:"呵呵呵"
          }
        },

        changeInfo:function(event){
          this.setState({
            value:'嘿嘿嘿'
          })
        },

        render:function(){
          return(
            <div>
              <p>{ this.state.value }</p>
              <button onClick={ this.changeInfo }>按钮</button>
            </div>
          )
        }
      })

      ReactDOM.render(<Hello />,document.getElementById("root"))

    </script>
    <div id="root"></div>
    <script type="text/babel">

      /*
        state:组件内部的状态
        props:组件之间的数据交互

        setState:引起视图的重绘

        虚拟DOM
      */

      var Hello = React.createClass({
        getInitialState:function(){
          return{
            value:true
          }
        },

        changeInfo:function(event){
          // 改变state状态
          this.setState({
            value: !this.state.value
          })
        },

        render:function(){
          var value = this.state.value;
          // 在react中,三目运算符使用非常频繁
          var info = value ? '孙悟空' : "六耳猕猴"

          return(
            <div>
              <p>{ info }</p>
              <button onClick={ this.changeInfo }>改变</button>
            </div>
          )
        }
      })

      ReactDOM.render(<Hello />,document.getElementById("root"))

    </script>


8_State 和 Props


官网文档:State & 生命周期 – React

    <div id='root'></div>
    
    <script type="text/babel">
      /*
        state和props的应用
      */

      // 用于显示内容
      var Person = React.createClass({
        render:function(){
          var name = this.props.name;
          var age = this.props.age;
          return(
            <div>
                <h3>{ name }</h3>
                <p>{ age }</p>
            </div>
          )
        }
      })

      // 处理业务逻辑
      var User = React.createClass({
        getInitialState:function(){
          return{
            name:"iwen",
            age:20
          }
        },

        changeInfo:function(event){
          this.setState({
            name:"ime",
            age:30
          })
        },

        render:function(){
          return(
            <div>
              <Person name={this.state.name} age={this.state.age} />
              <button onClick={ this.changeInfo }>按钮</button>
            </div>
          )
        }
      })

      ReactDOM.render(<User />,document.getElementById("root"))

    </script>
  1. State 与 props 类似,但是 state 是私有的,并且完全受控于当前组件

9_组件生命周期函数

官网文档:State & 生命周期 – React

    <div id="root"></div>

    <script type="text/babel">

      /*
        组件(component)的生命周期!
          componentWillMount:组件渲染之前
          componentDidMount:组件渲染之后
          componentWillUnMount:组件卸载之前
          shouldComponentUpdate:状态改变之后执行
          componentWillUpdate:组件即将更新
          componentDidUpdate:组件更新之后
          componentWillReceiveProps:props改变之后执行

      */

      var MyComponent = React.createClass({

        // 初始化props
        getDefaultProps:function(){

        },

        // 初始化state
        getInitialState:function(){
          return{
            value:"孙悟空"
          }
        },

        componentWillMount:function(){
          console.log("组件渲染之前");
        },

        componentDidMount:function(){
          console.log("组件渲染之后");
        },
        componentWillUnMount:function(){
          console.log("组件卸载之前");
        },
        shouldComponentUpdate:function(){
          console.log("state改变之前");
          return true;
        },
        componentWillUpdate:function(){
          console.log("组件state更新之前");
        },
        componentDidUpdate:function(){
          console.log("组件state更新之后");
        },
        componentWillReceiveProps:function(){

        },

        changeInfo:function(){
          this.setState({
            value:"妖猴,休走!"
          })
        },

        // 渲染
        render:function(){
          return(
            <div>
              <p>{ this.state.value }</p>
              <button onClick={this.changeInfo}>按钮</button>
            </div>
          )
        }
      })

      ReactDOM.render(<MyComponent />,document.getElementById("root"))

    </script>

10_组件声明周期函数应用


官网文档:State & 生命周期 – React

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="dist/browser.min.js"></script>
    <script src="dist/jquery.js"></script>
    <script src="dist/react.js"></script>
    <script src="dist/react-dom.js"></script>
    <style media="screen">
      .img{
        width: 300px;
      }
    </style>
  </head>
  <body>

    <div id="root"></div>

    <script type="text/babel">

      var Hello = React.createClass({

        getInitialState:function(){
          return{
            info:[{
              title:"",
              content:"",
              img:""
            }]
          }
        },

        // 在生命周期函数中读取数据
        // 在渲染完成之后执行数据加载
        componentDidMount:function(){
          $.ajax({
            type:"get",
            url:"http://www.wwtliu.com/sxtstu/blueberrypai/getIndexBanner.php",
            success:function(data){
              // info  修改state
              this.setState({
                info:data.banner
              })
            }.bind(this)
          })
        },

        render:function(){
          return(
            <div>
              <ul>
                {
                  this.state.info.map(function(item,index){
                    return (
                      <li key={index}>
                        <h3>{ item.title }</h3>
                        <p>{ item.content }</p>
                        <img className="img" src={item.img} />
                      </li>
                    )
                  })
                }
              </ul>
            </div>
          )
        }
      })

      ReactDOM.render(<Hello />,document.getElementById("root"))

    </script>

  </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值