React

参考资料:

React 官网
阮一峰教程
菜鸟教程
React 初识
===
React 是一个用于构建用户界面的 JAVASCRIPT 库。
主要用于构建UI, 是 MVC** (模型(model)-用户界面(view)-控制器(controller))**中的 V(用户界面)。

JSX

React 使用JSX语法,它允许HTML与javascript混写。
遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;
遇到代码块(以 { 开头),就用 JavaScript 规则解析。

  <h1> {this.props.title} </h1>

ReactDOM.render()

该方法是React的基本法,它可以将模板(下面的element以及component)转为HTML语言,再插入到指定的DOM中。
Element (元素)
===
描述的是你希望在屏幕中显示的内容

  const element=<h1> hello world </h1>;
  ReactDom.render(
    element,
    document.getElementById('root')
  )

我们可以将该元素传递给DOM节点,通过ReactDOM.render()

React element 是不可改变的,在它创建了之后,它的属性,子元素都不能改变。如果非要改,就只能重新创建一个新的元素。

  function tick(){
    const element = (
            <div>
                 <h2>It is {new Date().toLocaleTimeString()}.</h2> 
            </div>
         );
  ReactDOM.render(
            element,
            document.getElementById('root')
        );
  }
  {/*每一次执行setInterval都会创建一个新的元素*/}
  setInterval(tick, 1000);

Components and Props(组件和属性)

组件可以把UI(用户界面)分成许多独立的小块来单独考虑。
它可以接收任意形式的输入和 返回一个React element

定义一个组件有两种方式 (从React 角度来看这两种方法是相同的)

  function Welcome(props){
      return <h1>Hello, {props.name}</h1>;
    }  {/*js的函数形式*/}

  class Welcome extends React.Component{
    render(){
            return <h1>Hello, {this.props.name}</h1>;
          }
    }   {/*ES6中的类来定义*/}

  const element = <Welcome name="Sara" />;
  ReactDOM.render(
        element,
        document.getElementById('root')
    );

注意:
组件的名字只能用大写字母开头,否则会报错
组件类只能包含一个顶层标签,否则也会报错。

比如定义多个组件

  function App () {
        return (
                <div>
                      <Welcome name="Sara" />
                      <Welcome name="Cahal" />
                      <Welcome name="Edite" />
                </div>
            );
    }

    ReactDOM.render(
          <App />
          document.getElementById('root')
      );

组件必须返回一个单一的根元素,所以我们用一个<div>元素来包含所有的 <Welcome /> element ,否则会报错。
在返回的根元素中(比如上面的<div >),我们可以尽可能将有联系的部分合成一个组件。

注意:
定义一个function内的函数不能改变它的输入,比如下面第一种可以第二种不行。

  function sum(a, b) {
       return a + b;
      }
  function withdraw(account, amount) { 
    account.total -= amount;
      }

State and Lifecycle(状态和生命周期)

在一开始时说“React element在一旦创建了之后,它的属性,子元素都不能改变。如果非要改,就只能重新创建一个新的元素。”所以每一次时间改变都要重新把element传递给DOM。但实际上,大多数React只执行一次 ReactDOM.render() ,所以引入State 。

React把组件看做是状态机,一开始有一个初始的State。通过与用户的交互导致State改变后,自动调用组件内的this.render 方法,再次渲染组件。

  var LikeButton = React.createclass({
      getInitialState:function()  {
          return {liked:false};
       },
      
      handleClick: function (event)  {
          this.setState({liked:!this.state.liked});
      }
    
      render: function()  {
          var text = this.State.liked ?"like" : "unliked";
          retuen  (
              <p onClick={this.handleClick}>
                  你<b>{text}</b>我。点我切换状态。
              </p>
          );
      }
  });

 ReactDOM.rennder(
    <LikeButton />,
    document.getElementById('root') 
  );

注意:
设置State的只能使用setState({comment: 'Hello'}); 方法

实现组件的生命周期
组件的周期分为三个状态
* Mounting 已插入真实DOM
* Updating 正在被重新渲染
* Unmounting 已移出真实DOM
React为每个状态都提供了两种处理函数,will函数在进入状态前调用,did函数在进入状态之后调用。共计五种:
* componentWillMount ()
* componentDidMount ()
* componentWillUpdate(object nextProps, object nextState)
* componentDidUpdate(object prevProps, object prevState)
* componentWillUnmount()

比如,我们当一个组件在一开始提交到DOM时可以设置一个不断更新State的计时器(timer)

  componentDidMount()  {
      this.timerID = setInterval( 
      () => this.tick(), 
      1000 
      );
  }

当该组件从DOM中移除时可以清除这一个定时器

  componentWillUnmount() {
      clearInterval(this.timerID);
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,813评论 1 18
  • 最近看了一本关于学习方法论的书,强调了记笔记和坚持的重要性。这几天也刚好在学习React,所以我打算每天坚持一篇R...
    gaoer1938阅读 1,672评论 0 5
  • 以下内容是我在学习和研究React时,对React的特性、重点和注意事项的提取、精练和总结,可以做为React特性...
    科研者阅读 8,222评论 2 21
  • 算算实习到现在,工作经历一年半了。 其实也是模模糊糊的一年半,总是不擅长记住特别的日子,大体这个月份。(不要在意这...
    tree阅读 257评论 0 1
  • Java动态代理 引言 最近在看AOP代码,其中利用到了Java动态代理机制来实现AOP织入。所以好好地把Java...
    草捏子阅读 1,527评论 0 18