ReactJs

reactJs 用于创建用户界面的框架

  • 使用jsx语法(javascript + xml)

页面引入:

  • 页面依次引入react.js
  • 引入 react-dom.js
  • 最后引入 browser.js

jsx语法只能在type=text/babel的script标签内书写!!!
xml中的标签可以自定义,可以使用class属性等
由于使用了jsx语法(javascript+Xml,browser.js提供),所以script的type值如下: <script type="text/babel"></script>

使用

1.渲染

ReactDOM.render(参数1:渲染的内容(可以接受变量);参数2:需要渲染的地方);
html片段: <div id="container"></div> js片段: <script type="text/babel"> ReactDOM.render(<h1>hello react</h1>,document.getElementById('container')); </script>

2.组件

  • 原生组件 : let h1 = <h1>h1标题 </h1>

  • 自定义组件 : 使用 React.createClass()方法自定义组件

    • 自定义组件使用时,首字母需要大写,并且是个标签(可单可双),需要闭合
  • 自定义组件语法2:
    let List = function(){ return (<h1>圣诞快乐</h1>) }

  • ES6语法定义组件:
    let List = () => (<h1>组件</h1>)

// 使用自定义组件时,首字母大写 let Zujian = React.create({ render: function(){ return (<div>自定义组件</div>) } }); // 页面渲染使用 ReactDOM.render(<Zujian/>,document.getElementById('container'));

组件嵌套使用

  • 组件之间可以互相嵌套使用

// 子组件 let SmallBox = React.createClass({ render:function(){ return ( <div>这是一个小盒子</div> ) } }) // 父组件 let BigBox = React.createClass({ render:function(){ return ( <div> <h1>这是一个大盒子</h1> // 父组件嵌套使用子组件 <SmallBox/> <SmallBox/> <SmallBox/> <SmallBox/> </div> ) } })

列表渲染

  • 1.定义一个数组,必须是组件数组,可以直接在组件内部定义也可以在全局定义
  • 2.在组件内部使用{组件名}渲染即可
  注意:定义数组时,需要给数组添加一个key值,作为遍历的依据,且key值不能相等
let list = [
  <h3 key={1}>aaa</h3>
  <h3 key={2}>bbb</h3>
              ...
]
  • 渲染列表时,必须在组件外部使用一个容器包裹起来
    <div>{list}</div>
组件设置样式(style)
外部引入样式表
  • 1.建立单独的css文件,css内写好样式
  • 2.通过import Style(自定义名) from 'css文件的路径' 来引入css文件,定义变量名接受
  • 给标签加上 className = {变量名.class名}即可

<div className = {Style.container}>

内部样式表
  • js文件内部定义样式,注意的是font-size这一类的格式的写法需要写成fontSize的形式!!!

let StyleSheet = { title:{ fontSize:24px, fontWeight:700 } } //使用:<h2 style={StyleSheet.title}>我是一个标签<h2>

行内样式
  • 直接在标签内部定义,需要注意的是在样式表的{}内部需要再使用{}包裹样式
    <h3 style={ {color:'red'} }>hello react<h3>
componentDidMount()
  • 组件生命周期:使用componentDidMount()方法可以操作组件的属性;

项目中使用react使用react定义组件

1.React.creatClass({ render:function(){ return(<div>定义一个组件</div>) } }) 2.// 先引入react的组件模块(Component) import React,{Component} from 'react'; // 定义组件 class App extends Component{ render(){ return(<div>定义组件</div>) } }

获取组件属性 props

  • props 可以获取组件属性
    • <App title="Merry Chrismtas"/>
      获取属性:{this.props.title} 即可获取APP组件的title属性
      动态属性:使用state方法 {this.state.title}
      设置动态属性:使用setState({title:abc})

props 获取属性代码示例图

props获取组件属性.jpg

states 动态属性获取方法示例图

states 动态属性获取.png

react接口获取数据

直接在componentDidMount()中使用ajax请求数据;即组件加载完成之后的生命周期内调用ajax获取数据;
使用 fetch()方法 获取接口数据
  • 安装命令:npm install whatwg-fetch --save

遍历小方法:map :
datas.map(function(item){ console.log(item); // item 即数组中的每一个元素 })

fetch(url).then(function(res){...}).then(function(body){......}); // 下一个then能获取到上个then的返回值

fetch()方法代码实例图
fetch方法请求数据.png

React路由

路由先引入路由模块
  • 导入模块 :
    import React,{Component} from 'react'; import ReactDOM,{render} from 'react-dom'; import { Router, Route, IndexRoute, Link, hashHistory,IndexLink, browserHistory } from 'react-router'
  • 定义路由:

import {Router,Route,IndexRoute,Link,hashHistory,IndexLink,browserHistory} from 'react-router' // hashHistory与browserHistory的区别:跳转时url是否显示# const ACTIVE={color:'red'}//选中的样式 let App=({children})=>( <div> <h1>APP</h1> <ul> <li><Link to="/home" activeStyle={ACTIVE}>home</Link></li> <li><Link to="/list" activeStyle={ACTIVE}>list</Link></li> </ul> {children} </div>) let Home=()=>( <div> <h1>这是home页面</h1> </div>) let List=()=>(<div><h1>这是list页面</h1> </div>) // 编辑路由 let router=(<Router history={hashHistory})> <Router path="/" component={App}> <IndexRouter component={Home}/>//默认显示页面 <Route path="/home" component={Home}/> 如果有子路由的话,把单标签改为双标签,把子路由插进去 <Route path="/list" component={List}> <IndexRouter component={One}/> <Route path="/list/one" component={One}/> </Route> </Router> </Router>)

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

推荐阅读更多精彩内容