React学习笔记(二)

条件渲染

  1. if、&&、||、三元表达式

列表 & Keys

  1. 循环列表时需要给每一项加上独一无二的key;
  2. 提取出一个 ListItem 组件,你应该把 key 保存在数组中的这个 <ListItem /> 元素上,而不是放在 ListItem 组件中的 <li> 元素上;
  3. 元素的 key 在他的兄弟元素之间应该唯一;
  4. jsx的{}表达式中不能出现var,const,let等这种关键字。

组件API

  1. 设置状态:setState

    参数格式

     setState(object nextState[, function callback])
    

    参数说明

     nextState,将要设置的新状态,该状态会和当前的state合并
     callback,可选参数,回调函数。该函数会在setState设置成功,且组件重新渲染后调用。
     合并nextState和当前state,并重新渲染组件。setState是React事件处理函数中和请求回调函数中触发UI更新的主要方法。
    
  2. 替换状态:replaceState (将被弃用)

    参数格式

    replaceState(object nextState[, function callback])

    参数说明

    nextState,将要设置的新状态,该状态会替换当前的state。
    callback,可选参数,回调函数。该函数会在replaceState设置成功,且组件重新渲染后调用。
    replaceState()方法与setState()类似,但是方法只会保留nextState中状态,原state不在nextState中的状态都会被删除。

  3. 设置属性:setProps

    参数格式

    setProps(object nextProps[, function callback])

    参数说明

    nextProps,将要设置的新属性,该状态会和当前的props合并
    callback,可选参数,回调函数。该函数会在setProps设置成功,且组件重新渲染后调用。
    设置组件属性,并重新渲染组件。

    使用场景

    props相当于组件的数据流,它总是会从父组件向下传递至所有的子组件中。当和一个外部的JavaScript应用集成时,我们可能会需要向组件传递数据或通知React.render()组件需要重新渲染,可以使用setProps()。
    更新组件,我可以在节点上再次调用React.render(),也可以通过setProps()方法改变组件属性,触发组件重新渲染。

  4. 替换属性:replaceProps

    参数格式

    replaceProps(object nextProps[, function callback])

    参数说明

    nextProps,将要设置的新属性,该属性会替换当前的props。
    callback,可选参数,回调函数。该函数会在replaceProps设置成功,且组件重新渲染后调用。
    replaceProps()方法与setProps类似,但它会删除原有 props

  5. 强制更新:forceUpdate

    参数格式

    forceUpdate([function callback])

    参数说明

    callback,可选参数,回调函数。该函数会在组件render()方法调用后调用。

    使用场景

    forceUpdate()方法会使组件调用自身的render()方法重新渲染组件,组件的子组件也会调用自己的render()。但是,组件重新渲染时,依然会读取this.props和this.state,如果状态没有改变,那么React只会更新DOM。
    forceUpdate()方法适用于this.props和this.state之外的组件重绘(如:修改了this.state后),通过该方法通知React需要调用render()
    一般来说,应该尽量避免使用forceUpdate(),而仅从this.props和this.state中读取状态并由React触发render()调用

  6. 获取DOM节点:findDOMNode

    获取操作:

     ReactDOM.findDOMNode(this.refs.counterDom),日中refs挂载在真实DOM节点处,类似vue的this.$refs.XXX
    

    使用场景

     可以用来操作DOM
    
  7. 判断组件挂载状态:isMounted

    注意

     isMounted 的方法在 ES6 中已经废除。主要的原因是它经过实际使用与测试可能不足以检测组件是否挂载,尤其是对于有一些异步的程序情况,以及逻辑上造成混乱。现在用以下方法代替:
     componentDidMount() {
         this.mounted = true;
     }
     componentWillUnmount() {
         this.mounted = false;
     }
    

条件渲染

  1. 初始渲染页面在componentDidMount生命周期里使用

    使用场景

    React 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取,当从服务端获取数据时可以将数据存储在 state 中,再用 this.setState 方法重新渲染 UI。
    当使用异步加载数据时,在组件卸载前使用 componentWillUnmount 来取消未完成的请求。

React 表单与事件

  1. HTML 表单元素与 React 中的其他 DOM 元素有所不同,因为表单元素生来就保留一些内部状态;
  2. 在 HTML 当中,像 <input>, <textarea>, 和 <select> 这类表单元素会维持自身状态,并根据用户输入进行更新;
  3. 但在React中,可变的状态通常保存在组件的状态属性中,并且只能用 setState() 方法进行更新;
  4. 在 React 中,不使用 selected 属性,而在根 select 标签上用 value 属性来表示选中项,
    如 <select value={this.state.value} onChange={this.handleChange}></select>;
  5. 处理多个表单:当你有处理多个 input 元素时,你可以通过给每个元素添加一个 name 属性,来让处理函数根据 event.target.name 的值来选择做什么
  6. 当你需要从子组件中更新父组件的 state 时,你需要在父组件通过创建事件句柄 (handleChange) ,并作为 prop (updateStateProp) 传递到你的子组件上

    父组件:

     class HelloMessage extends React.Component {
         constructor(props) {
             super(props);
             this.state = {value: 'Hello React!'};
             this.handleChange = this.handleChange.bind(this);
         }
         handleChange(event) {
             this.setState({value: 'React'})
         }
         render() {
             var value = this.state.value;
             return <div>
                     <Content myDataProp = {value} 
                     updateStateProp = {this.handleChange}></Content>
                 </div>;
         }
     }
    

    子组件

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

推荐阅读更多精彩内容

  • React中创建组件 第一种 - 创建组件的方式 使用构造函数来创建组件,如果要接收外界传递的数据,需要在构造函数...
    AizawaSayo阅读 219评论 0 0
  • Learn from React 官方文档 一、Rendering Elements 1. Rendering a...
    恰皮阅读 2,659评论 2 3
  • 这次主要针对react state和props这两个元素进行分析 state: 在react只需更新组件的stat...
    ybrelax阅读 127评论 0 2
  • 组件的数据挂载方式 属性(props) props是正常是外部传入的,组件内部也可以通过一些方式来初始化的设置,属...
    千锋HTML5学院阅读 257评论 0 1
  • 一. React 概述 React是一个视图层的框架(库)。在传统的方式中,我们通过编写HTML代码来设计网页的结...
    Even_Cyw阅读 230评论 0 0