初识React

© fengyu学习

今年9月,为了重构的项目,在一个星期内,我囫囵吞枣似地学习了React。

即便是4个月后的今天,回想起当日,我还是会记得5个小伙伴,每天晚上从7点半起,就准时到会议室里学习React的场景,不免又觉得有些好笑。

如今,重构的项目进入了最后的联调阶段,我也算是经过了实战的洗礼了,不过在探索React的路上跌跌撞撞,确没能留下半点记录,实属遗憾。

我决定将这四个月的经历整理整理,记录下来,已便将来更好的工作学习!

1、Why React?

这是我在项目初期一直在思考的问题,为什么重构的项目选择了 React

最初我是这么想的

  • 追求时尚新技术,好耶,棒棒哒!

后来我发现了

  • 健全的学习文档及良好的社区

  • github各种轮子

  • 需要兼容IE8

再后来我觉得是

  • 数据驱动视图

  • 方便自定义UI

由于我们是第三方脚本,为了良好的兼容性,之前的脚本都是用 原生JS 。所以我对这么大的框架一下似乎也接受不了。

不过重构的负责人 XB 哥还是说服了我。

  • 今日带宽不比往日

  • React@14做了拆分,可以有选择性的引用

加上我的内心也是向往新技术的。

经过了一段时间的使用,我觉得 React 确实有其独特之处,相较于 原生JS 的好处:

  • JSX语法,拥有清晰的dom结构和样式引用,带来与原生JS创建DOM不一样的体验

  • 数据驱动视图,一定程度上简化了视图与逻辑分离的难度

下面就开始干货吧!

2、组件、state与props

ComponentReact 中重要的组成部分,大至整个页面,小到一个按钮,都有可能是一个组件。

stateprops 则是一个组件绽放光彩的必备良药!

举个栗子:

import React, {Component} from "react";
import ReactDOM from "react-dom";

class SimpleComponent extends Component {

  constructor(props) {
    super(props)
  }

  render() {
    return <div>我只是我</div>
  }
}

ReactDOM.render(<SimpleComponent/>, document.getElementById('app'));

如此一来 SimpleComponent 组件的 render() 方法就将一个最简单的组件渲染到了网页上,这与html并没有什么区别,并不能展现 React 的强大威力!

下面我们使用 state 给这个 SimpleComponent 做做包装

import React, {Component} from "react";
import ReactDOM from "react-dom";

class SimpleComponent1 extends Component {
  constructor(props) {
    super();
    this.state = {
      content: '我就是我,那颜色不一样的烟火',
      color: '#F00'
    };
  }

  render() {
    let style = {
      color: this.state.color
    }

    return <p style={style}>{this.state.content}</p>
  }

  componentDidMount() {
    setInterval(() => {
      this.setState({
        color: this.state.color === '#F00' ? '#0F0' : '#F00'
      })
    }, 1000);
  }
}

ReactDOM.render(
  <div>
    <SimpleComponent/>
    <SimpleComponent1/>
  </div>,
  document.getElementById('app'));  

componentDidMount()React 组件自带方法,在第一次执行 render() 方法后执行,表示组件已经加载完毕)中采用 setState() 方法( React 组件自带方法,能够设置 this.state 中属性的值)对 this.state 中的 color 属性进行设置,使得组件的颜色能够动态改变。

可以看到,利用 state ,我们可以轻松的实现 DOM 的渲染,而不需要直接操作 DOM,但是仅仅有 state ,似乎还缺少了些什么,我们还可以利用 props ,将这个组件更加的完善!

class SimpleComponent2 extends Component {
  constructor(props) {
    super(props);
    this.state = {
      content: this.props.content,
      color: '#F00'
    }
  }

  render() {
    let style = {
      color: this.state.color
    }

    return <p style={style}>{this.state.content}</p>
  }

  componentDidMount() {
    setInterval(() => {
      this.setState({
        color: this.state.color === '#F00' ? '#0F0' : '#F00'
      })
    }, 1000);
  }
}

ReactDOM.render(
  <div>
    <SimpleComponent/>
    <SimpleComponent1/>
    <SimpleComponent2 content="我就是我,颜色不一样的烟火"/>
    <SimpleComponent2 content="我也是烟火哦"/>
  </div>,
  document.getElementById('app'));

首先 props 是依赖外部传入的,如上代码 <SimpleComponent2 content="我也是烟火哦"/>

其次在 Component 中使用 props 是直接调用 this.props.属性名称 的。

了解清楚了 props 的用法,再来谈谈使用的必要性。

组件库(泛指如:按钮、日历,树,表格、列表、网格)等基础组件,编写的目的是为了方便使用的。

尽管上面举的例子并不复杂,然而如果我们需要在多个页面使用这个效果时,并不是在每个页面都写一个这样的组件。

而是提取出组件的共同点,找出他们的不同点,共同点利用 state 来实现,不同点利用 props 传入,来达到复用组件的目的

其实 stateprops 的作用还不止这些,在后续的总结中,还有父子组件通信方面的作用。

3、写在文末

React 的故事才刚刚开始,接触React的时间也不算太长。如有描述不周的地方,请斧正,万分感谢。

相关代码,可以在github上下载

从6月到现在,已有半年没有写文章了。虽说很忙,亦不过是借口而已!

庆幸自己能在 2017 年的初始,重新拾起总结的习惯,新年新气象嘛,加油!

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

推荐阅读更多精彩内容

  • 最近看了一本关于学习方法论的书,强调了记笔记和坚持的重要性。这几天也刚好在学习React,所以我打算每天坚持一篇R...
    gaoer1938阅读 1,666评论 0 5
  • react官网:https://facebook.github.io/react/内容来源:http://www....
    Lusia_阅读 505评论 0 0
  • 1、虚拟DOM:降低了算法复杂度,提升速度,主要是diff computation 2、组件(快速复用) 3、学会...
    94小辉阅读 235评论 0 0
  • 《小王子》,改编成电影之后,却是部灰色的现代童话,世界很冷,与自己想象的电影差了一个星球的距离。。玫瑰与小狐狸教会...
    mo清夜无尘阅读 252评论 1 0
  • 故友辞京,赴疆三年。留下未满月的儿子,满头白发的父母。辞行聚会上都是互相认识十年以上的兄弟。 男人如果说不喜欢酒,...
    小地方酒阅读 461评论 0 0