zoukankan      html  css  js  c++  java
  • React菜鸟教程

    React 特点

    • 1.声明式设计 −React采用声明范式,可以轻松描述应用。

    • 2.高效 −React通过对DOM的模拟,最大限度地减少与DOM的交互。

    • 3.灵活 −React可以与已知的库或框架很好地配合。

    • 4.JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使用它。

    • 5.组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。

    • 6.单向响应的数据流 − React 实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

    https://www.runoob.com/react/react-tutorial.html

    元素渲染

    首先我们在一个 HTML 页面中添加一个 id="example" 的 <div>:

    <div id="example"></div>

    然后

    const element = <h1>Hello, world!</h1>;
    ReactDOM.render(
        element,
        document.getElementById('example')
    );

    更新元素渲染

    <div id="example"></div>
    <script type="text/babel">
    function tick() {
      const element = (
        <div>
          <h1>Hello, world!</h1>
          <h2>现在是 {new Date().toLocaleTimeString()}.</h2>
        </div>
      );
      ReactDOM.render(
        element,
        document.getElementById('example')
      );
    }
    setInterval(tick,
    1000); </script>

    以上实例通过 setInterval() 方法,每秒钟调用一次 ReactDOM.render()。

    我们可以将要展示的部分封装起来,以下实例用一个函数来表示:

    <div id="example"></div>
    <script type="text/babel">
    function Clock(props) {
      return (
        <div>
          <h1>Hello, world!</h1>
          <h2>现在是 {props.date.toLocaleTimeString()}.</h2>
        </div>
      );
    }
    
    function tick() {
      ReactDOM.render(
        <Clock date={new Date()} />,
        document.getElementById('example')
      );
    }
    
    setInterval(tick, 1000);
    </script>

    除了函数外我们还可以创建一个 React.Component 的 ES6 类,该类封装了要展示的元素,需要注意的是在 render() 方法中,需要使用 this.props 替换 props:

    class Clock extends React.Component {
      render() {
        return (
          <div>
            <h1>Hello, world!</h1>
            <h2>现在是 {this.props.date.toLocaleTimeString()}.</h2>
          </div>
        );
      }
    }
     
    function tick() {
      ReactDOM.render(
        <Clock date={new Date()} />,
        document.getElementById('example')
      );
    }
     
    setInterval(tick, 1000);

    JSX

     我们推荐在 React 中使用 JSX 来描述用户界面。我们知道元素是构成 React 应用的最小单位,JSX 就是用来声明 React 当中的元素。

    React组件

    本章节我们将讨论如何使用组件使得我们的应用更容易来管理。

    接下来我们封装一个输出 "Hello World!" 的组件,组件名为 HelloMessage:

    function HelloMessage(props) {
        return <h1>Hello World!</h1>;
    }
     
    const element = <HelloMessage />;
     
    ReactDOM.render(
        element,
        document.getElementById('example')
    );

    在JavaScript中,函数和类、接口感觉没什么区别。。。

    你可以使用函数定义了一个组件,你也可以使用 ES6 class 来定义一个组件。

    const element = <HelloMessage /> 为用户自定义的组件。

    注意,原生 HTML 元素名以小写字母开头,而自定义的 React 类名以大写字母开头,比如 HelloMessage 不能写成 helloMessage。除此之外还需要注意组件类只能包含一个顶层标签,否则也会报错。

    React State(状态)

    React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。

    React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。

    以下实例创建一个名称扩展为 React.Component 的 ES6 类,在 render() 方法中使用 this.state 来修改当前的时间。

    添加一个类构造函数来初始化状态 this.state,类组件应始终使用 props 调用基础构造函数。

    <div id="example"></div>
    <script type="text/babel">
    class Clock extends React.Component {
      constructor(props) {
        super(props);
        this.state = {date: new Date()};
      }
    
      render() {
        return (
          <div>
            <h1>Hello, world!</h1>
            <h2>现在是 {this.state.date.toLocaleTimeString()}.</h2>
          </div>
        );
      }
    }
    
    ReactDOM.render(
      <Clock />,
      document.getElementById('example')
    );
    </script>

    接下来,我们将使Clock设置自己的计时器并每秒更新一次。

    将生命周期方法添加到类中

    在具有许多组件的应用程序中,在销毁时释放组件所占用的资源非常重要。

    每当 Clock 组件第一次加载到 DOM 中的时候,我们都想生成定时器,这在 React 中被称为挂载

    同样,每当 Clock 生成的这个 DOM 被移除的时候,我们也会想要清除定时器,这在 React 中被称为卸载

    我们可以在组件类上声明特殊的方法,当组件挂载或卸载时,来运行一些代码:

    class Clock extends React.Component {
      constructor(props) {
        super(props);
        this.state = {date: new Date()};
      }
     
      componentDidMount() {
        this.timerID = setInterval(
          () => this.tick(),
          1000
        );
      }
     
      componentWillUnmount() {
        clearInterval(this.timerID);
      }
     
      tick() {
        this.setState({
          date: new Date()
        });
      }
     
      render() {
        return (
          <div>
            <h1>Hello, world!</h1>
            <h2>现在是 {this.state.date.toLocaleTimeString()}.</h2>
          </div>
        );
      }
    }
     
    ReactDOM.render(
      <Clock />,
      document.getElementById('example')
    );

    实例解析

    componentDidMount() 与 componentWillUnmount() 方法被称作生命周期钩子。

    在组件输出到 DOM 后会执行 componentDidMount() 钩子,我们就可以在这个钩子上设置一个定时器。

    this.timerID 为定时器的 ID,我们可以在 componentWillUnmount() 钩子中卸载定时器。

    数据自顶向下流动

    React Props

    state 和 props 主要的区别在于 props 是不可变的,而 state 可以根据与用户交互来改变。这就是为什么有些容器组件需要定义 state 来更新和修改数据。 而子组件只能通过 props 来传递数据。

    使用 Props

    以下实例演示了如何在组件中使用 props:

     
  • 相关阅读:
    spark集群搭建(三台虚拟机)——kafka集群搭建(4)
    spark集群搭建(三台虚拟机)——zookeeper集群搭建(3)
    MySQL忘记密码
    [ERROR]Unable to locate package
    spark集群搭建(三台虚拟机)——hadoop集群搭建(2)
    spark集群搭建(三台虚拟机)——系统环境搭建(1)
    secureCRT连接虚拟机
    virtualBox里Ubuntu设置静态IP
    一文读懂JS中的原型和原型链(图解)
    完整原型链详细图解之JS构造函数、原型 原型链、实例化对象
  • 原文地址:https://www.cnblogs.com/2008nmj/p/14989453.html
Copyright © 2011-2022 走看看