跟着阮一峰老师学习React.js
来源:互联网 发布:sql是一种什么语言 编辑:程序博客网 时间:2024/06/05 01:54
算算自己学的东西虽然实战很少但是也该学这个了,起码我要认识它呀!
1,如果有跟我一样想要入门reactjs的同样可以跟着阮老师走走看阮老师的REact.js,
2,当然对于英文阅读水平较高的同学可以看官方文档reactjs官方手册
下面我开始学习喽跟着老师做个笔记(我觉得尽量每一个部分都自己完全实现一遍):
一,就html模板的理解:
引入的库react.js(react核心库) react-dom.js(dom相关功能库) browser.js(将jxs语法转变为js语法,多在服务器端运行因为大)
jxs:JSX本身就和XML语法类似,可以定义属性以及子元素。唯一特殊的是可以用大括号来加入JavaScript表达式。遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析。在这里使用JXS语法的<script>标签中type="text/babel"
二,ReactDOM.render()方法使用,将html模板插入页面:
<body> <div id="cyan1"></div><script type="text/babel"> ReactDOM.render(<h1>cyancyan</h1>,document.getElementById('cyan1'));</script> </body>
三,JXS语法:允许html,js混写,原则见上边红色字
实例一:
<body> <div id="cyan"></div><script type="text/babel"> var names=['cyan1','cyan2','cyan3','cyan4'];ReactDOM.render(<div>{ names.forEach(function(name,index){ return <div key={index}>hi,{name}</div> })}</div>,document.getElementById('cyan'));</script> </body>实例二:用来说明jxs语法中使用变量,此处是一个数组变量
<body> <div id="cyan"></div><script type="text/babel"> var arr=[<h1 key='0'>cyancyan</h1>, //此处注意为数组元素加key值<p key='1'>thinkgamer</p>];ReactDOM.render(<div>{arr}</div>,document.getElementById('cyan'));</script> </body>
四,组件:React.createClass()方法实例:
<body> <div id="cyan"></div><script type="text/babel"> var Hicyan=React.createClass({ render:function(){ return <h1>hi,{this.props.className}</h1>}});ReactDOM.render( <Hicyan className='cyan'/>,//此处单双标均可 document.getElementById('cyan'));</script> </body>注意点:1,对于添加的标签属性值的获取利用 this.props.属性名 得到;此外这里属性名特殊的有class-----className代替 , for-----htmlFor代替,因为这两个与js保留字冲突;
2,会报错:(1) 组件首字母必须大写; (2) 一个组件只能有一个顶级标签(意思就是组外层标签不能有兄弟标签)
五,this.props.children问题
实例:
<body> <div id="cyan"></div><script type="text/babel"> var Hicyan=React.createClass({ render:function(){ return <ol>{ React.Children.map(this.props.children,function(child){ return <li>{child}</li> }) }</ol>}});ReactDOM.render( <Hicyan> <span>cyan1</span> <span>cyan2</span> </Hicyan>, document.getElementById('cyan'));</script> </body>
this.props属性与组件属性的一个大的差别在于组件的所有子节点this.props.children,由于组件子节点的个数不确定,因此this.props.children类型可能是undefined,object,array;为了解决,利用React.Children方法来决定:React.Children.map来解决。
六,PropTypes用于验证组件参数
注意每一部分的大小写及其使用,实例如下:
<body><div id="cyan"></div><script type="text.babel"> var Prop=React.createClass({ PropTypes:{ title:React.PropTypes.string.isrequired, }, render:function(){ return <h1>{this.props.title}</h1> } }), ReactDOM.render( <Prop title="123"></Prop>, document.getElementById("cyan") )</script></body>当然也可以设置默认属性的值用getDefaultProps来返回对属性的约束。
七,ref获取真实DOM, 进行进一步的渲染:
实例如下:
<body> <div id="cyan"></div> <script type="text/babel"> var Crel=React.createClass({ handleClick:function(){ this.refs.textinput.focus(); }, render:function(){ return ( <div> <input type="text" ref="textinput"/> <input type="button" value="CLICKGO" onClick={this.handleClick}/> </div> ); } }); ReactDOM.render( <Crel></Crel>, document.getElementById("cyan") ); </script> </body>此处学习完毕后去熟悉Reactjs事件部分的细节知识点.
八九,State状态与表单元素的结合理解:
实例如下:
<body> <div id="cyan"></div> <script type="text/babel"> var Fomsta=React.createClass({ getInitialState:function(){ return {value:"cyan"}; }, handelChange:function(event){ var e=event?event:window.event; this.setState({value:e.target.value}); }, render:function(){ var value=this.state.value; return ( <div> <input type="text" value={value} onChange={this.handelChange}/><p>{value}</p> </div> ) } }); ReactDOM.render( <Fomsta/>, document.getElementById("cyan") ) </script> </body>组件的变化,互动是不可避免的,因此组件中借由状态来使其变化,而表单的交互更是需要利用状态的变化来实现与用户的良好互动。getInitialState()来设置初始状态,setState()则实现状态的不断切换改变。
十,生命周期的描述:
React中生命周期以DOM的载入来划分为三个:
Mounting【DOM元素已经被插入】,updating【DOM重新加载】,unmounting【DOM被移除】,
此外每个阶段又有两个函数来规定状态will【将要】,did【已经做了】因此有以下五个函数:
componentWillMount(),componentDidMount(),compnentWillUpdate( 下 属性, 下 状态),componentDidUpdate(上属性,上状 态),componentWillUnmount(),
两个特殊的函数:
componentWillReceiveProps(下一个属性)【已加载组件收到新的参数时 调用】,shouldUpdateMount(下一个属性,下一个状态)【判断是否要加载下一个】
应用实例如下(本例子是利用了插入后的函数状态):
<body> <div id="cyan"></div> <script type="text/babel"> var Life=React.createClass({ getInitialState:function(){ return {opacity:1.0}; }, componentDidMount:function(){ var timer=setInterval(function(){ var opacity=this.state.opacity; opacity-=0.3; if(opacity<0.1){ opacity=1.0;} this.setState({opacity:opacity}); }.bind(this),100); }, render:function(){ return( <div style={{opacity:this.state.opacity}}> hi,{this.props.name} </div>) } }); ReactDOM.render( <Life name="cyan"/>, document.getElementById('cyan')) </script> </body>
- 跟着阮一峰老师学习React.js
- 跟着老师走向远方
- React.js学习笔记
- React.js开发学习
- 学习react.js
- React.js -- 学习手记
- react.js学习(1)
- React.js学习笔记
- React.js系列学习
- react.js总结学习
- React.js学习
- 【跟着贺老师做C++项目学习】WEEK1日期结构体
- 学习Unity 3d,跟着雨潭老师的脚步前进。。。
- 跟着韦东山老师学习嵌入式----字符设备驱动程序之poll机制
- python自定发送邮件,跟着老师学习的代码,偏偏报错怎么办
- 跟着React Native的趋势
- React.js学习版1~
- React.js学习版2~
- D3添加title提示信息时出现滚动条时,显示错位的问题
- 使用RecycleView加载不同的布局(类似淘宝京东购物车+推荐商品列表)
- LeetCode -- 120. Triangle
- ACM题集以及各种总结大全!
- ObjectARX编程(四) --------符号表简述
- 跟着阮一峰老师学习React.js
- uC/OS-III之时钟节拍列表
- 《Android群英传》笔记5——自定义View
- 单链表的C++实现
- 在Android Stduio 中使用requestWindowFeature(Window.FEATURE_NO_TITLE)无效的解决方法
- FCC HTML5 and CSS5 标记
- c#的using用法
- H264(NAL简介与I帧判断)
- 常用js跳转页面方法