React 入门语法


React 的开发准备:

<!DOCTYPE html>
<html>
  <head>
    <script src="../build/react.js"></script>
    <script src="../build/react-dom.js"></script>
    <script src="../build/browser.min.js"></script>
  </head>
  <body>
    <div id="example"></div>
    <script type="text/babel">
      // ** Our code goes here! **
    </script>
  </body>
</html>

React 开发用到的库有:

  • react.js 是React 的核心库
  • react-dom.js 是提供与DOM相关的功能
  • Browser.js 的作用是将JSX语法转为JavaScript语法。

React 的基本语法:

React 对象:是React库的入口。

下面是一些常见的API:
createElement:定义一个虚拟dom

React.createElement(参数一,参数二,参数三);
  • 参数一:表示虚拟dom的名称(可以是任意元素的名称,也可以是一个组件的名称)
  • 参数二:表示虚拟dom的一些必要的属性(比如:id, className, title等)
  • 参数三:表示虚拟dom的子元素 (若是文本节点,可以直接书写,不必书写createElement)
var ul = React.createElement(
    'ul',
    null,
    React.createElement('li', null, '男士'),
    React.createElement('li', null, '女士')
)

React.createClass:创建一个组件类

React.createClass({对象});
  • 参数是一个对象,对象的属性或方法是对组件的说明。
  • 有个必要方法render:将虚拟dom树输出
  • 组件类的名字第一个字母必须大写。
  • 组件类只能包含一个顶层标签,否则也会报错。
var Uls = React.createClass({
    render: function(){
      return(
        <ul>
          <li>男装</li>
          <li>女装</li>
        </ul>
      )
    }
});
ReactDOM.render(<Uls><Uls>, document.getElementById('example'));
ReactDom对象: 操作dom

ReactDOM.render 方法: 是将虚拟dom渲染到页面

ReactDom.render(参数一,参数二,参数三);
  • 第一个参数:表示虚拟dom
  • 第二个参数:表示真实dom容器元素
  • 第三个参数:表示一个回调函数

其他语法

JSX中插值

插值:向虚拟DOM中动态的插值(可以插入元素内容中,也可以插入元素属性中)
语法:大括号{}

var Header = React.createClass({
  render: function(){
    var name = 'Jack';
    var oDate = new Date();
    return (
      <div>
        <span>{name}</span>
        <span>{oDate.getHours() > 12 ? '下午好':'上午好'}</span>
      </div>
    );
  }
});
ReactDOM.render(<Header></Header>,document.getElementById('example'));

注意点:

  • JSX中 不能使用if else语句,但是可以使用三元运算表达式来代替。
  • JSX中 注释需要写在花括号中。
列表渲染

JSX 遇到数组,会自动展开所有成员

var List = React.createClass({
  createLi: function() {
    var arr = ['苹果’, '梨', '橘子'];
    return arr.map(function(index, value){
      return (<li>{value}</li>);
    });
  },
  render: function() {
    return (
      <ul>{this.createLis()}</ul>
    );
  }
});
React.render(<List></List>, document.getElementById('example'));

两个描述性的属性

Props 属性:

props 是在组件创建时候提供的,往往是不会更改的。
获取属性:this.props
设置默认属性:getDefaultProps

var List = React.createClass({
    getDefaultProps: function() {
        return {
            titleData: ['默认标题']
        };
    },
    getTitle: function(){
        return this.props.titleData.map(function(value, index){
            return (
                <li key={index}>{value}</li>
            );
        });
    }, 
    render: function(){
        return (
            <ul>{this.getTitle()}</ul>
        );
    }
});

ReactDOM.render(<List titleData={['北京','天津']}></List>, document.getElementById('example'));

State状态,

组件内部维护的一个数据,通常在组件发生交互时候发生改变。
获取属性:this.state
设置默认属性:getInitialState
改变状态:this.setState

var Nav =React.createClass({
    changeNav: function() {
        this.setState({
            num: this.state.num+1
        });
    },
    getInitialState: function(){
        return {
            num : 0
        }
    },
    render: function(){
        return (
            <div>
                <ul>
                    <li style={{display: this.state.num % 3 == 0 ? 'block' : 'none'}}>111 111 111</li>
                    <li style={{display: this.state.num % 3 == 1 ? 'block' : 'none'}}>222 222 222</li>
                    <li style={{display: this.state.num % 3 == 2 ? 'block' : 'none'}}>333 333 333</li>
                </ul>
                <span onClick={this.changeNav}>换一换</span>
            </div>
        );
    }
});
ReactDOM.render(<Nav></Nav>, document.getElementById('header'));

State 与 props 比较
相同点:在改变的时候,都会触发render函数
区别:props 是在组件创建时候提供的,往往是不会更改的;state 在组件发生交互的时候改变。

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

推荐阅读更多精彩内容

  • 原教程内容详见精益 React 学习指南,这只是我在学习过程中的一些阅读笔记,个人觉得该教程讲解深入浅出,比目前大...
    leonaxiong阅读 2,809评论 1 18
  • 以下内容是我在学习和研究React时,对React的特性、重点和注意事项的提取、精练和总结,可以做为React特性...
    科研者阅读 8,215评论 2 21
  • It's a common pattern in React to wrap a component in an ...
    jplyue阅读 3,248评论 0 2
  • 海芬/文 花开的季节 春风沐浴大地 风儿抚摸过枝头 开了好多的奇葩 网络的春天 比现实还要繁华 小拥抱爬上枯枝 变...
    海语天籁阅读 529评论 2 5
  • 有许多文字写下时已经忘了意义 再次回首,亦如初见 不止是字,连人也是 这一刻所见之人,已非上一刻所见之人 个中滋味...
    蝶水月秋千阅读 1,464评论 0 0