react入门

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Helvetica Neue" }
p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "PingFang SC" }
p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px "Helvetica Neue"; min-height: 16.0px }
span.s1 { font: 14.0px "Helvetica Neue" }
span.s2 { font: 14.0px "PingFang SC" }
span.Apple-tab-span { white-space: pre }

应用场景:

1.复杂场景下的高性能

2.重用组件库,组件组合

3.懒

  react.main.js react的核心库

  react-dom.js 与dom相关的功能

   browser.main.js 用于将jsx语法转化为js语法

组件生命周期:

 状态:

  Mounting:已插入真实DOM

  Updating:正在被重新渲染

  UnMounting:已移除真实DOM

方法:

  componentWillMount 在渲染前调用,在客户端也在服务端

  componentDidMount 在第一次渲染后调用,只在客户端。之后组件已经生成了对于的DOM结构,可以通过this.getDOMNode()来进行访问。

  componentWillReceiveProps 在组件接收到一个新的prop时被调用,初始化时不会被调用。

  shouldComponentUpdate 返回布尔值,在组件接收到新的props或者state时被调用。在初始化时或者使用forceUpdate时不被调用。

   componentWillUpdate 在组件接收到新的props或者state但还没render时被调用,在初始化时不会被调用。

  componentDidUpdate 在组件完成更新后立即调用。在初始化时不会被调用。

   componentWillUnmount 在组件从DOM中移除时立即被调用。

添加样式:
   添加类名,给类名添加样式 注意:class在es6中是关键字,得写成className
   行内样式,style={{color:‘red‘}}或者style={obj},obj是定义的对象形式的变量

  

    css: 

      .divbox {
        font-size: 24px;
      }

    js:      var Hello  = React.createClass({
    		render: function() {
    			var obj = {color: ‘red‘};
    			return <div className="divbox" style={obj}>Hello {this.props.name}</div>;
    		}
    	});
    	ReactDOM.render(<Hello name=‘world‘ />,document.getElementById(‘container‘));

注释

render:function(){
    return (
          {/*注释*/}
    )
}

表达式

        return (         <div><h4>计算:{1+1}</h4>
                    <h4>三元表达式:{1===1?‘true‘:‘false‘}</h4>
                </div>

            );

数组

    var arr = [
            <h4>数组元素1</h4>,
            <h4>数组元素2</h4>
        ]return (
                <div style={{opacity: this.state.opacity}}>
                    {arr}
                </div>

            );

ref

通过给元素设置的ref获取到dom结构

        handleClick: function(event) {
                {/*
                        <!-- 通过 ref获取到dom结构 -->
                */}

                var tipE = ReactDOM.findDOMNode(this.refs.tip);
                if(tipE.style.display == ‘none‘) {
                    tipE.style.display = ‘inline‘;
                }else {
                    tipE.style.display = ‘none‘;
                }
                {/*
                <!-- 阻止默认事件 -->
                */}

                event.stopPropagation();
                event.preventDefault();
            },
            render: function() {
                return (<div>
                    <button onClick={this.handleClick}>显示|隐藏</button><span ref=‘tip‘>测试点击</span>
                </div>);
            }

注:代码中嵌套多个html标签时,需要使用一个div元素包裹。

state

  初始化:   

      getInitialState: function() {
                alert(‘initial‘);
                return {
                    opacity: 1.0,
                    fontSize: ‘20px‘
                };
            }

  修改:

        componentDidMount: function() {
                alert(‘did‘);
                var _self = this;
                window.setTimeout(function(){

                    _self.setState({
                        opacity: 0.5,
                        fontSize: ‘40px‘
                    })
                },1000)
            }

渲染react组件

    ReactDOM.render(<div>
            <ClickEvent/>
            <TestClickComponent/>
            <TestInputComponent/>
            <HelloMessage />
        </div>,document.getElementById(‘container‘));

注:有多个组件时需要使用一个div元素包裹。

事件

      changeHandeler: function(event) {
                event.stopPropagation();
                event.preventDefault();
                this.setState({
                    inputContent: event.target.value
                })
            },
            render: function() {
                return (
                    <div>
                        <input type="text" onChange={this.changeHandeler}/><span>{this.state.inputContent}</span>
                    </div>);
            }

父子组件

  子组件上使用表单  onChange 方法将触发 state 的更新并将更新的值传递到子组件的输入框的 value 上来重新渲染界面

    //定义子组件    var Content = React.createClass({
            render: function() {
              return  <div>
                    <input type="text" value={this.props.myDataProp} onChange={this.props.updateStateProp} />
                    <h4>{this.props.myDataProp}</h4>
                    </div>;
            }
        });
        var HelloMessage = React.createClass({       //初始化state
            getInitialState: function() {
              return {value: ‘Hello Runoob!‘};
            },       //改变state的值
            handleChange: function(event) {
              this.setState({value: event.target.value});
            },
            render: function() {
              var value = this.state.value;
              return <div>            {/*将state和change事件函数传递给子组件*/}
                    <Content myDataProp = {value}
                        updateStateProp = {this.handleChange}></Content>
                    </div>;
            }
        });

  

sublime的react插件:

Emmet:

  自动扩展react的className

 配置:Preference -> Package Settings -> Emmet -> KeyBindingd-User贴上下面的代码:

  

[{
    "keys": ["tab"],
    "command": "expand_abbreviation_by_tab",

    // put comma-separated syntax selectors for which
    // you want to expandEmmet abbreviations into "operand" key
    // instead of SCOPE_SELECTOR.
    // Examples: source.js, text.html - source
    "context": [{
            "operand": "source.js",
            "operator": "equal",
            "match_all": true,
            "key": "selector"
        },

        // run only if there‘s no selected text
        {
            "match_all": true,
            "key": "selection_empty"
        },

        // don‘t work if there are active tabstops
        {
            "operator": "equal",
            "operand": false,
            "match_all": true,
            "key": "has_next_field"
        },

        // don‘t work if completion popup is visible and you
        // want to insert completion with Tab. If you want to
        // expand Emmet with Tab even if popup is visible --
        // remove this section
        {
            "operand": false,
            "operator": "equal",
            "match_all": true,
            "key": "auto_complete_visible"
        }, {
            "match_all": true,
            "key": "is_abbreviation"
        }
    ]
}]

babel: 支持ES6、.jsx代码语法高亮

jsformat:

  js格式化,通过修改它的e4x属性可以使它支持jsx。

  配置:Preference -> Package Settings -> JsFormat -> Settings-User贴上下面的代码:

 {
  "e4x": true,
  // jsformat options
  "format_on_save": true,
}
时间: 2024-11-07 15:36:55

react入门的相关文章

React 入门实例教程

React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的

(转)React 入门实例教程

作者: 阮一峰 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非

学习react入门demo的总结。

在github上找到react入门学习比较好的demo,下面是那个链接: https://github.com/ruanyf/react-demos 然后接下来是每个demo的学习笔记: demo1: <body> <div id="example"></div> <script type="text/jsx"> //jsx类型可html和javasript一起写,遇到 HTML 标签,就用 HTML 规则解析:遇到代

react入门(5)

对前面四篇内容进行简单的回顾: react入门(1):jsx,组件,css写法 react入门(2):事件,this.props.children,props,...other react入门(3):jsx/html/css分开写(分成三个文件),state,onChange事件,refs react入门(4):props和state的混搭使用,state与props的对比,生命周期(挂载.更新.移除) 今天要讲的是组件之间的通信,会结合前面学的一些内容,主要以实例为主来进行讲解. 一.父组件向

react入门之使用webpack搭配环境(一)

react入门之搭配环境(一) 如果你想直接上手开发,而跳过这些搭配环境的繁琐过程,推荐你使用官方的create-react-app命令 npm install -g create-react-app //安装create-react-app脚手架 npm为node.js的包管理工具,请确保你已经安装了node.js create-react-app my-app //使用create-react-app创建,my-app为项目名称 cd my-app/ //进入my-app目录 npm sta

【转】react入门实例教程

作者: 阮一峰 日期: 2015年3月31日 写在前面:原文链接http://www.ruanyifeng.com/blog/2015/03/react.html    github地址https://github.com/ruanyf/react-demos 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场

React入门资源整理

另外,附上我搜集的一些比较实用的学习资料,建议先看这些撸起来,再看什么乱七八糟的awsome系列. React入门资源整理 孔明前端团队React项目新手指南:http://www.07net01.com/2015/09/920779.html

包建强的培训课程(15):React入门与提高

v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} Normal 0 false 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈<「『[[[〝﹙﹛﹝$(.[{£¥ !%),.:;>?]}¢¨°·ˇˉ

React入门实例教程

文章转自:阮一峰 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JavaScript MVC 框架,都不满意,就决定自己写一套,用来架设 Instagram 的网站.做出来以后,发现这套东西很好用,就在2013年5月开源了. 由于 React 的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却

react入门(1)

这篇文章也不能算教程咯,就算是自己学习整理的笔记把. 关于react一些相关的简介.优势之类的,随便百度一下一大堆,我就不多说了,可以去官网(http://reactjs.cn/)看一下. 这片主要讲一下入门基础的东西吧~~~~~关于脚手架工具.router等等,后面有空再来说吧 先来看下面这个简单的例子,了解一下 index.html <!DOCTYPE html> <html> <head> <title>react入门</title> &l