初始react

react 简介

react 是用于构建用户界面的 JavaScript 库 官网

特点

  • 声明式编程:我们只需要维护自己的状态(数据),当状态(数据)改变时,React可以根据最新的状态(数据)去渲染我们的UI界面
  • 组件化开发
  • 多平台适配:可以开发移动端跨平台或 web 应用程序

开发依赖

  • react:react开发所必须的核心代码
  • react-dom:渲染在不同平台所需的核心代码
  • babel:将 jsx 转换成 react 代码的工具
<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>

如何引入

  • 一:直接 CDN 引入
  • 二:下载后,添加本地依赖
  • 三:通过 npm

通过CDN引入中的 crossorigin属性的目的是为了拿到跨域搅拌呢的错误信息

react 简单使用

数据

组件中的数据大致分为两类

  • 参与界面更新的数据:当数据变量时,需要更新组件渲染的内容
  • 不参与界面更新的数据:当数据变量时,不需要更新将组建渲染的内容

参与界面更新的数据可以称之为是参与数据流,这个数据是定义在当前对象的state中(react 中的数据是单向的)

数据通常是定义在当前对象的 state 中的,如果要修改数据的话,需要调用 this.setState 方法

class App extends React.Component {
  constructor() {
    super();
    this.state = {
      message: "Hello World",
    }
  }
}
ReactDOM.render(<App/>, document.getElementById("app"));

事件绑定

关于 this 的指向问题,默认情况下的 this 是指向 undefined 的

比如给一个按钮(button 添加点击事件),在正常的DOM操作中,监听点击,监听函数中的this其实是节点对象

但是在 React 中,react 并不是直接渲染成真实的DOM,我们所编写的button只是一个语法糖,它的本质React的Element对象,所以 this 的指向才会是 undefined

如何绑定 this

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

  <script src="../react/react.development.js"></script>
  <script src="../react/react-dom.development.js"></script>
  <script src="../react/babel.min.js"></script>

  <script type="text/babel">
    class App extends React.Component {
      constructor() {
        super();
        this.state = {
          message: "Hello World",
        }
        this.changeMessage = this.changeMessage.bind(this)
      }

      render() {
        return (
          <div>
            <h2>{this.state.message}</h2>
            <button onClick={this.changeMessage}>按钮</button>
            <button onClick={this.changeMessage.bind(this)}>按钮</button>
            <button onClick={() => {this.changeMessage()}}>按钮</button>
          </div>
        )
      }
      changeMessage() {
        this.setState({
          message: '被改变了'
        })
      }
    }
    ReactDOM.render(<App />, document.getElementById("app"));
  </script>

</body>

列表展示

<body>
  <div id="app"></div>
  
  <script src="../react/react.development.js"></script>
  <script src="../react/react-dom.development.js"></script>
  <script src="../react/babel.min.js"></script>

  <script type="text/babel">
    class App extends React.Component {
      constructor() {
        super();
        this.state = {
          message: "Hello World",
          movies: ["大话西游", "盗梦空间", "星际穿越", "流浪地球"]
        }
      }

      render() {
        const liArray = [];
        for (let movie of this.state.movies) {
          liArray.push(<li>{movie}</li>);
        }

        return (
          <div>
            <h2>电影列表</h2>
            <ul>
              {
                this.state.movies.map((item) => {
                  return <li>{item}</li>
                })
              }
            </ul>
          </div>
        )
      }
    }
    ReactDOM.render(<App/>, document.getElementById("app"));
  </script>
</body>

计数器

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

  <script src="../react/react.development.js"></script>
  <script src="../react/react-dom.development.js"></script>
  <script src="../react/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()}}>+1</button>
            <button onClick={() => {this.decrement()}}>-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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值