对于React的理解

React是一个为数据提供渲染为HTML视图的开源JavaScript 库。React视图通常采用包含以自定义HTML标记规定的其他组件的组件渲染。React为程序员提供了一种子组件不能直接影响外层组件的模型,数据改变时对HTML文档的有效更新,和现代单页应用中组件之间干净的分离

4 min read
By myfreax
对于React的理解

React是一个为数据提供渲染为HTML视图的开源JavaScript 库。React视图通常采用包含以自定义HTML标记规定的其他组件的组件渲染。React为程序员提供了一种子组件不能直接影响外层组件的模型,数据改变时对HTML文档的有效更新,和现代单页应用中组件之间干净的分离

为什么在产品应用中一定要预先编译JSX?

因为React可以在编译期间就可以发现错误和调试,另一方面预先编译jsx就可以不用在浏览器运行时编译,提高性能,所以在产品的应用中要预先编译jsx为javascript文件,使用Facebook官方工具react-tools,可以实时编译JSX文件,当然也可以与第三方工具或者IDE整合,比如(Webstrom)

注意jsx语法是可选的,你可以纯javascript编写,使用jsx可以提高效率

React有那些代码规范?

原生HTML原生DOM元素名以小写字母开头,而自定义的React组件以大写字母开头

欢迎补充

怎么调试React应用?

使用React Developer Tools可以看到DOM元素和React组件之间的映射以及属性props和state在组件间的传递,React Developer Tools是一个chrome扩展,再配合chrome开发者工具(搭梯子翻墙),就可以实现React应用断点和组件调试,注意版本兼容性问题React Developer Tools最新版声明不兼容旧版0.13,我在尝试一个demo中就遇到一些问题,比如

Warning: Each child in an array or iterator should have a unique "key" prop. Check the render method of CommentList`. 
[See for more information](https://fb.me/react-warning-keys).

React提示真是完美,告诉你怎么做还告诉为什么这么做,非常棒

/**
 * 评论列表子组件
 */
var CommentList = React.createClass({
    render: function () {
        /**
         *  遍历data数据,并返回一个包含多个组件元素的数组
         */
        var commentNodes = this.props.data.map(function (comment) {
            return (
                /*
                * Warning: Each child in an array or iterator should have a unique "key" prop
                * 在数组或者迭代器中需要给子级唯一id的属性
                * 子级需要设置唯一id来保证多个渲染阶段保持自己的特征和状态
                * https://fb.me/react-warning-keys
                * 新增key={comment.id}
                * React版本1.4
                */
                <Comment author={comment.author} key={comment.id}>
                    {comment.text}
                </Comment>
            );
        });
        return (
            <div className="commentList">
                {commentNodes}
            </div>
        );
    }
});

Target container is not a DOM element

Target container is not a DOM element(目标容器不是DOM元素)

原因:把react组件放在目标容器的前面,导致组件先执行,而DOM元素没有加载进来,React则会提示目标容器不存在;解决方式:把组件引用放在目标元素的后面

对于组件,组件属性和生命周期的理解

关于组件

1:ReactDOM.render() 实例化根组件,启动框架,把组件实例注入到第二个参数指定的原生的DOM元素中并且引导其它组件启动,在0.13之后使用ReactDOM.render()实例化根组件,启动框架
2:React的组件就像HTML的DOM树一样可以进行树状结构的组合在一起,也就是说整个React应用就是一系列的组件按照树状的结构组合而成

组件属性

props

1:props属性数据是在组件树中一级一级传递的
2:组件不能修改自身的props属性
3:子组件可以通过this.props属性获取父组件中的参数

state

1:可以通过调用this.setState()重新渲染组件。
2:state仅用于实现交互功能,对用户输入、服务器请求或者时间变化等作出响应,这时就需要使用State

生命周期

更多