2-jsx核心语法一

一 es5  es6类定义 以及类的继承

 

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 22:05:18
 * @LastEditTime: 2022-10-11 22:09:16
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

  <script>
    //es5中如何定义类
    function Person(name, age) {
      this.name = name
      this.age = age
    }

    Person.prototype.running = function() {
      console.log(this.name, this.age, "running")
    }

    let p = new Person('why', 18)
    console.log(p.name, p.age)

    p.running()
  </script>
</body>
</html>

 

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 22:09:44
 * @LastEditTime: 2022-10-11 22:18:18
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

  <script>
    //es6通过class创建
    class Person {
      //构造方法
      constructor(name, age) {
        this.name = name
        this.age = age
      }
      //定义方法
      running() {
        console.log(this)
        console.log(this.name, this.age, "running")
      }
    }

    const p = new Person("why", 18)
    console.log(p.name, p.age)
    p.running()

    //this绑定题目
    let func = p.running
    //func() //undefined

    let obj = {
      name: 'kobe',
      age: 30
    }
    func.call(obj) //使用call是对象   apply是数组

    //重新给func赋值
    func = func.bind(obj)
    func()
  </script>
</body>
</html>

 

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 22:19:11
 * @LastEditTime: 2022-10-11 22:30:26
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <!--
    面向对象有三大特征  封装  继承   多态
    继承:1 减少重复的代码  2 多态的前提(鸭子类型)
  -->
  <script>

    class Person {
       constructor(name, age) {
        this.name = name
        this.age = age
       }

       running() {
        console.log("running方法")
       }
    }

    class Student extends Person {
      constructor(name, age, sno) {
        super(name, age)
        this.sno = sno
      }
    }

    const stu = new Student("why", 18, 110)
    console.log(stu.name, stu.age, stu.sno)
    stu.running()

    class Teacher extends Person{
      constructor(name, age, title) {
        //子类必须要初始化父类对象
        super(name, age)
        this.title = title
      }
    }

    const teach = new Teacher("why teacher", 22, '数学')
    console.log(teach.name, teach.age, teach.title)
    teach.running()
  </script>
</body>
</html>

二 案例练习_列表循环

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 22:33:05
 * @LastEditTime: 2022-10-11 22:53:46
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app"></div>

  <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>

  <!--编写react代码-->
  <script type="text/babel">
    class App extends React.Component {
      constructor() {
        super()

        this.state = {
          message: 'Hello World',
          title: '电影列表',
          movies: [
            "大话西游", "盗梦空间", "星际穿越", "流浪地球"
          ]
        }
      }
      render() {
        const liArray = []  //方法一循环的方式
        for(let movie of this.state.movies) {
          liArray.push(<li>{ movie }</li>)
        }
        return (
          <div>
            <h2>{ this.state.title }</h2>
            <ul>
              { liArray }
            </ul>

            <ul>
              {
                this.state.movies.map((item) => {
                  return <li>{ item }</li>
                })
              }
            </ul>
          </div>
        )
      }
    }
    ReactDOM.render(<App/>, document.getElementById("app"))
  </script>

</body>
</html>

 三 计数器案例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <div id="app"></div>

  <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>

  <script type="text/babel">
  class App extends React.Component {
    constructor(props) {
      super(props)

      this.state = {
        counter: 0
      }
    }

    render() {
      return (
        <div>
          <h2>当前计数: { this.state.counter }</h2>
          <button onClick={this.increment.bind(this)}>+1</button>
          <button onClick={this.decrement.bind(this)}>-1</button>
        </div>
      )
    }

    increment() {
      this.setState({
        counter: this.state.counter + 1
      })
    }

    decrement() {
      this.setState({
        counter: this.state.counter - 1
      })
    }
  }

  ReactDOM.render(<App/>, document.getElementById('app'))
  </script>
</body>
</html>

 四 认识jsx

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 23:12:46
 * @LastEditTime: 2022-10-11 23:13:36
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <div id="app"></div>

  <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>

  <script type="text/babel">
  
  //jsx语法
  const element = <h2>hello world</h2>

  ReactDOM.render(element, document.getElementById('app'))
  </script>
</body>
</html>

 五 jsx中如何写注释

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 23:22:54
 * @LastEditTime: 2022-10-11 23:52:28
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <div id="app"></div>

  <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>

  <script type="text/babel">
  class App extends React.Component {
    constructor() {
      super()
    }
    render() {
      return (
        <div>
          {/*我是一段注释*/}
          <h2>Hello world</h2>
        </div>
      )
    }
  }
  ReactDOM.render(<App/>, document.getElementById('app'))
  </script>
</body>
</html>

 六 jsx嵌入数据

 

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 23:25:42
 * @LastEditTime: 2022-10-11 23:53:18
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
  <div id="app"></div>

  <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>

  <script type="text/babel">
  class App extends React.Component {
    constructor(props) {
      super(props)

      this.state = {
        //1 {}中可以正常显示的内容
        name: 'why', //String
        age: 18,  //Number
        names: ['abc', 'cba', 'bba'], //Array
        //2 {}中不能显示(忽略)
        test1: null, // null
        test2: undefined, //undefined
        test3: true, //Boolean
        flag: true,
        //3. 对象不能作为jsx的子类
        friend: {
          name: 'kobe',
          age: 12,
        }
      }
    }
    render() {
      return (
        <div>
          <h2>{ this.state.name }</h2>
          <h2>{ this.state.age }</h2>
          <h2>{ this.state.names }</h2>
          <h2>{ this.state.test1 }</h2>
          {/*如果想显示+ '' 或者用tostring*/}
          <h2>{ this.state.test1 + '' }</h2>
          <h2>{ this.state.test2 }</h2>
          <h2>{ this.state.test3 }</h2>
          <h2>{ this.state.test3.toString() }</h2>

          <h2>{ this.state.flag ? '你好啊' : null }</h2>
        </div>
      )
    }
  }
  ReactDOM.render(<App/>, document.getElementById('app'))
  </script>
</body>
</html>

七 jsx嵌入表达式

<!--
 * @Description: 
 * @Version: 2.0
 * @Autor: sun
 * @Date: 2022-10-11 23:38:34
 * @LastEditTime: 2022-10-11 23:42:58
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

  <div id="app"></div>

  <script src="https://cdn.bootcdn.net/ajax/libs/react/18.2.0/umd/react.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/react-dom/18.2.0/umd/react-dom.development.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/babel-standalone/7.19.3/babel.min.js"></script>

  <script type="text/babel">
  class App extends React.Component {
    constructor(props) {
      super(props)

      this.state = {
        firstName: 'Kobe',
        lastName: 'bryant',
        isLogin: true
      }
    }

    render() {
      const { firstName, lastName, isLogin } = this.state
      return (
        <div>
          {/*1 运算符表达式*/}
          <h2>{ firstName + lastName }</h2>
          <h2>{ 50 * 20 }</h2>

          {/*2 三元表达式*/}
          <h2>{ isLogin ? '欢迎回来' : '请先登陆' }</h2>

          {/*3 进行函数调用*/}
          <h2>{ this.getFullName() }</h2>
        </div>
      )
    }

    getFullName() {
      return this.state.firstName + " " + this.state.lastName
    }
  }

  ReactDOM.render(<App/>, document.getElementById('app'))
  </script>
</body>
</html>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值