React学习笔记.md

React官网学习笔记

扩展

Pete Hunt: React: Rethinking best practices -- JSConf EU 2013

其他

  1. 受控组件和非受控组件
  2. diff 算法

JSX

const element = <h1>hello world</h1>;

概念:

  1. jsx是JavaScript语法扩展
  2. jsx也是对象

特性:

  1. jsx可以插入表达式
  2. 属性名驼峰写法 区别于原生HTML tabindex=>tabIndex, class=>className
  3. 防注入攻击XSS,渲染前对特殊字符转码并转为字符串处理

元素渲染

Rendering Elements

  1. React元素是不可变的,一旦创建就不能更改其children或者属性。
  2. An element is like a single frame in a movie: it represents the UI at a center point in time.(特别形象)
  3. React DOM会比较元素内容先后不同,渲染过程中只更新改变的部分。

组件和属性

Components and Props

  1. 概念来说,组件就好像js方法,接受一些参数(props),输出对应的React元素
  2. 两种创建方式 Functional、Class Components
  3. React组件名大写开头,区别于DOM原生标签
  4. 所有组件都必须像纯函数那样使用props

State和Lifecycle

  1. State类似props,但是state是组件私有和控制的。
  2. State 不能直接改变 如this.state.comment = 'hello';
  3. this.props this.state更新都是异步的,性能优化合并批处理,
    不要依赖其值做下一次计算
this.setState({
   counter: this.state.counter + this.props.increment
})

通过setState第二种形式接受函数,而不是接受对象来处理。

this.setState((prevState, props) => {
    counter: prevState.counter + props.increment
})
  1. 状态更新合并, 调用setState,React将提供的对象合并到
    当前状态。状态更新合并是浅合并。
  2. 数据自顶向下流动,通过props传递到组件

Handling Events事件处理

与DOM事件不同的地方
1 React事件书写驼峰写法
2 如果是jsx写法 需要传入函数而不是字符串来表示
传统HTML

<button onclick='activeLasers()'>Active Laser</button>

React写法

<button onclick={activeLasers}>Active Laser</button>

3 html中事件采用return false;来阻止默认行为,在React中
采用e.preventDefault()来处理
4 几种事件绑定方式

  • 在构造函数中使用bind绑定this
  • 在调用时候使用bind绑定this
  • 在调用时候使用箭头函数
  • 使用属性初始化器语法
    参考React事件绑定几种方式对比
class Toggle extends React.Component {
    constructor(props) {
      super(props);
      this.state = {isToggleOn: true};
      // 方式1 在构造函数中使用bind绑定this
      this.handleClick = this.handleClick.bind(this);
    }
  
    handleClick() {
      this.setState(prevState => ({
        isToggleOn: !prevState.isToggleOn
      }));
    }
    
    handleClick2() {
        console.log('handleClick2');
    }

    // 方式4: 属性初始化器语法
    handleClick4 = () => {
        console.log('handleClick3')
    }

    render() {
      return (
          <div>
                <button onClick={this.handleClick}>
                    click
                </button>
                {/*方式2 在调用的时候采用bind绑定this*/}
                <button onClick={this.handleClick.bind(this)}> 
                    click2
                </button>
                {/*方式3 在调用时候采用箭头函数 会有性能问题不推荐*/}
                <button onClick={() => this.handleClick3()}>
                    click3
                </button>
                <button onClick={this.handleClick4}>
                    click4
                </button>

          </div>
        
      );
    }
  }
  
  ReactDOM.render(
    <Toggle />,
    document.getElementById('root')
  );
}

条件渲染

  1. jsx中使用条件表达式 if...else 三目表达式来选择性渲染元素
  2. 通过return null;阻止组件渲染,不影响组件生命周期

列表和Keys

遍历渲染组件时候,需要加key,帮助React标识组件改变 增加删除等。
diff算法了解一下

状态提升

共享组件的数据,推荐将这些状态提升到最近的父组件管理。
在组件编写时候需要去考虑如何拆分组件进行编写。

组合和继承

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