大概大半年时间都在用react写项目,一直在笔记上零零星星地记录着,在新的一年即将到来之际,打算整理整理发出来。

一、React是什么?

React是Facebook开源的用于构建用户界面的javascript库。(好些人都觉着React很神秘,接触新事物时,一定要把它看得简单,这样你才有信心战胜它啊,其实入门真的不难)
二、React的特点即它与其他js库相比好在哪里?
1、专注MVC架构中的V(view),使React很容易和开发者已有的开发栈进行融合
2、组件化,React顺应了web开发组件化趋势,从UI抽象出不同的组件,方便多次使用
3、提高造作性能,React抛弃html而应用JSX语法,因为DOM操作非常慢,所以引入虚拟DOM的概念
三、React精髓
在虚拟DOM上创建元素,然后将它们渲染到真实DOM上
四、JSX
注意点:HTML 里的 class 在 JSX 里要写成 className,因为 class 在 JS 里是保留关键字。同理某些属性比如for 要写成 htmlFor
五、组件
1、组件的初始化
gitInitialState
初始化this.state的值,只在组件装载之前调用一次
但是在ES6中,可以在构造函数中初始化状态
class Counter extends Component {
constructor(props) {
super(props);
this.state = { count: props.initialCount };
}
render() {
// ...
}
}
gitDefaultProps
只在组件创建时调用一次并缓存返回的对象

使用 ES6 语法,可以直接定义 defaultProps 这个类属性来替代,这样能更直观的知道 default props 是预先定义好的对象值:

Counter.defaultProps = { initialCount: 0 };

render

render是必须的,是组装成这个组件的HTML结构
2、生命周期函数     
装载组件触发:
(1)componentWillMount
只会在装载之前调用一次,在 render 之前调用,你可以在这个方法里面调用 setState 改变状态,并且不会导致额外调用一次 render
 
(2)componentDidMount
只会在装载完成之后调用一次,在 render 之后调用,从这里开始可以通过 ReactDOM.findDOMNode(this)获取到组件的 DOM 节点。
 
更新组件触发:

这些方法不会在首次 render 组件的周期调用

  • componentWillReceiveProps
  • shouldComponentUpdate
  • componentWillUpdate
  • componentDidUpdate
卸载组件触发:
componentWillUnmount
3、DOM操作
大部分情况下不需要查询DOM去更新新组件的UI,只需要通过设置组件的状态(setState),但是如何直接操作DOM呢?
(1)findDOMNode()
当组件加载到页面后可以通过findDOMNode()方法拿到组件对应的DOM元素。
(2)ref
在需要引用的DOM元素上设置一个ref属性指定一个名称,然后通过this.refs.name来访问来访问对应的DOM元素
不要再render或者render之前访问refs,不要滥用refs
4、组件详细说明
static
statics 对象允许你定义静态的方法,这些静态的方法可以在组件类上调用;在这个块儿里面定义的方法都是静态的,意味着你可以在任何组件实例创建之前调用它们,这些方法不能获取组件的 props 和 state。如果你想在静态方法中检查 props 的值,在调用处把 props 作为参数传入到静态方法。
六、表单组件
交互属性:
value,用于<input> <textarea> <select>组件
checked,用于<checkbox> <radio>
selected,用于<option>组件

表单组件可以通过 onChange 回调函数来监听组件变化。当用户做出以下交互时,onChange 执行并通过浏览器做出响应:

  • <input> 或 <textarea> 的 value 发生变化时。
  • <input> 的 checked 状态改变时。
  • <option> 的 selected 状态改变时。

类型为 radiocheckbox 的<input> 支持 defaultChecked 属性, <select> 支持 defaultValue 属性。

七、state和props
刚开始接触时,我的前辈就跟我说React里最重要的就是运用state和props,之前不明白,现在的我对新手说的话也是如此。
组件先根据自己的props渲染一次自己,props是不可变的,它们从父节点传递过来,被父节点拥有。
为了实现交互,我们给组件引进了可变的state。this.state 是组件私有的,可以通过调用 this.setState() 来改变它,当状态改变时,组件重新渲染自己。
八、React的使用过程中遇到的warning报错锦集
1、
这个问题很多见啊,我当时写我们的AI-4.1列表时,用了Table组件,然后传进去的column里面也都有了key,但是还是报错,之后经检查发现是<a><div>这两个子元素没有key来区分,所以分别加了key,然后warning就消失了
 
2、vendor.js:1658 Warning: Notice: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://fb.me/react-special-props)
出错场景:notice提示组件的出现隐藏
为了区分,传递了一个唯一标实的参数key,但是从文档信息看:
attempting to access this.props.key from a component (eg. the render function) is not defined. If you need to access the same value within the child component, you should pass it as a different prop (ex: <ListItemWrapper key={result.id} id={result.id} />). 
 
 
于是我们改成通过传递id就可以了
PS:React中有两个比较特殊的参数:ref 和 key,不会被传递到组件
Most props on a JSX element are passed on to the component, however, there are two special props (ref and key) which are used by React, and are thus not forwarded to the component
3、vendor-6a78e5c….js:1698 Warning: Unknown prop `place` on <i> tag. Remove this prop from the element. For details, see https://fb.me/react-unknown-prop

in i (created by Rules (bindStores))
    in div (created by Rules (bindStores))
    in div (created by Rules (bindStores))

<i style={{float:'right',marginRight:'7px'}} data-tip={__('仅供查询报警对象名称')} place="top" className="iconfont tips"></i>

即一些自定义的元素,最好使用 data- 放在开头。

好了,本人不才,先到此为止。

React笔记整理的更多相关文章

  1. React 入门学习笔记整理目录

    React 入门学习笔记整理(一)--搭建环境 React 入门学习笔记整理(二)-- JSX简介与语法 React 入门学习笔记整理(三)-- 组件 React 入门学习笔记整理(四)-- 事件 R ...

  2. 学习ReactNative笔记整理一___JavaScript基础

    学习ReactNative笔记整理一___JavaScript基础 ★★★笔记时间- 2017-1-9 ★★★ 前言: 现在跨平台是一个趋势,这样可以减少开发和维护的成本.第一次看是看的ReactNa ...

  3. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  4. 从0开始学Swift笔记整理(五)

    这是跟在上一篇博文后续内容: --Core Foundation框架 Core Foundation框架是苹果公司提供一套概念来源于Foundation框架,编程接口面向C语言风格的API.虽然在Sw ...

  5. React笔记_(3)_react语法2

    React笔记_(3)_react语法2 state和refs props就是在render渲染时,向组件内传递的变量,这个传递是单向的,只能继承下来读取. 如何进行双向传递呢? state (状态机 ...

  6. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  7. Deep Learning(深度学习)学习笔记整理系列之(八)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  8. Deep Learning(深度学习)学习笔记整理系列之(七)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  9. Deep Learning(深度学习)学习笔记整理系列之(六)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表

    该文章为原创,日后可能会根据实际开发经验和网友评论,进行相应地方修改,为获得最新博客动态,望在转发博客的时候注明出处. 触发器要实现的功能: (1)获取对表Table1数据操作操作类型(insert. ...

  2. Hyper-V 与Broadcom网卡兼容问题

    最近在测虚拟机时,碰到一个网卡和Hyper-V不兼容问题,现在共享给大家参考,希望对大家有帮忙. 故障描述: Dell R720 Windows 2012操作系统下的Hyper-V环境后,虚拟机网络速 ...

  3. Python开发【十一章】:RabbitMQ队列

    RabbitMQ队列 rabbitMQ是消息队列:想想之前的我们学过队列queue:threading queue(线程queue,多个线程之间进行数据交互).进程queue(父进程与子进程进行交互或 ...

  4. cocos2dx 3.x(让精灵随着重力感应的方向移动而移动)

    // // GameScene.hpp // HelloWord // // Created by apple on 2017/1/7. // // #ifndef GameScene_hpp #de ...

  5. Hadoop平台常用配置及优化建议

    当发现作业运行效率不理想时,需要对作业执行进行性能监测,以及对作业本身.集群平台进行优化.优化后的集群可能最大化利用硬件资源,从而提高作业的执行效率.本文记录了在hadoop集群平台搭建以及作业运行过 ...

  6. react lazyload

    思路: DOM加载时,<img> 标签里,添加data-src路径 = src 路径, src路径 = 本地默认图片路径, DOM加载完成后,监听页面可视区域,有data-src时,就将s ...

  7. tar压缩

    tar 压 缩:tar -jcv -f filename.tar.bz2 要被压缩的文件或目录名称 查 询:tar -jtv -f filename.tar.bz2 解压缩:tar -jxv -f f ...

  8. css3(border-radius)边框圆角详解

    传统的圆角生成方案,必须使用多张图片作为背景图案.CSS3的出现,使得我们再也不必浪费时间去制作这些图片了,只需要border-radius属性,支持浏览器IE 9.Opera 10.5.Safari ...

  9. java 反射机制

    1.反射机制是什么: (1)反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能 ...

  10. 接口性能测试--JMeter

    1.JMeter Java Sampler介绍 setupTest做些初始化的工作,每个线程只执行一次 teardownTest做些清理工作,每个线程只执行一次 1.JMeter Java Sampl ...