react近期总结
来源:互联网 发布:复杂网络分析软件 编辑:程序博客网 时间:2024/06/02 05:11
这篇文章仅用于本人对于react知识的总结,只包含了一些基础知识,若出现错误请在评论中告知我(我也是正在学习中),文章内容我会在后面继续更改和添加,更多详细内容可以查看菜鸟教程或者官方文档
1.JSX
JSX是一个js的语法扩展,它被写出来供React使用,他不是合法的js,浏览器不能识别它。但是它会被JSX编译器编译成正规的js代码。
<h1>Hello World</h1>; //在React中这是一个JSX元素,不是html元素
唯一显而易见的不同是你会在一个js文件中发现它。JSX元素会像js表达式一样被对待,他们可以放在任何js表达式可以放置的位置,这就意味着一个JSX元素可以被存储在一个变量中,传递给一个函数,存储在一个对象或者数组中,等等。。。
JSX元素拥有属性,就像HTML元素一样,并且可以给JSX中的元素添加自定义属性,添加自定义属性需要使用data-前缀。就像这样:
<p data-myattribute = "somevalue">hello world</p>;
你也可以将一个JSX元素放置到另一个JSX元素里面,但是对于多行的JSX表达式,你应该讲他放置到括号里();一个JSX表达式必须刚好最外面有一个元素。例如下面这种写法是错误的:
<p>i am a paragraph</p><p>i am another paragraph</p>
你需要用一个div标签将他包裹:
<div><p>i am a paragraph</p><p>i am another paragraph</p></div>
在JSX中,你必须使用className替代class.
当你写一个单标签时必须包含一个斜线。例如img:
<img />
在JSX表达式中,每一个被放在花括号里的事物都会像一个正规的JS表达式被对待。
JSX元素也可以拥有事件监听,就像HTML元素一样。一个事件监听属性名字应该像onClick或者onMouserover:一个on再加上事件类型,并且事件名称应该使用驼峰法命名。这里有react中的事件。
在JSX表达式中,你不能使用if else语句,但是你可以使使用三元运算符。
2.组件
React的应用都是由组件组成,一个组件是一个可重复使用的代码块,为了某一个工作,这个工作经常去渲染一些HTML。需要注意的是 html元素名以小写开头,而自定义的react组件都是以大写开头。每一个组件必须使用react.createClass创建,它就像一个创建components的工厂。如果你有一个componnet类,那你就可以使用它去生产任意个实例组件,只要你想。react.createClass的参数必须是一个js对象,这个对象只有一个属性你必须设置:一个render函数,当然还可以有其他属性。同时,我们很多时候需要给组件传递参数,参数写在实例中,在组件类中用 this.props.+参数名 获得。
3.state
React 把组件看成是一个状态机(State Machines)。通过与用户的交互,实现不同状态,然后渲染 UI,让用户界面和数据保持一致。React 里,只需更新组件的 state,然后根据新的 state 重新渲染用户界面(不要操作 DOM)。其中:getInitialState方法用于定义初始状态,也就是一个对象;this.state用于获取这个对象;this.setState方法用于修改状态值,每次修改以后,自动调用this.render方法再次渲染组件.
4.props
state可变,props不可变。大多数使用props是在组件之间传递信息,它是一个对象名,这个对象存储着传递的信息,在组件类中可以使用this.props.+名称获得对象中的属性。。
5.实例
最后我自己写了个实例方便理解上面提到的几个东西
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title>react test</title> </head> <style> #example{ text-align: center; } </style> <body> <div id="example"></div> <!--先导入几个必要的js库--> <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script> <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script> <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script> <script type="text/babel"> var MyName = React.createClass({ render:function(){ return <p>my name is {this.props.name}</p>; } //总结一个错误:我总爱在这后面加一个 ; 符号,一旦写了一个符号就会出错 }); var MyHobby = React.createClass({ render:function(){ return <p>I like playing {this.props.hobby}!</p>; } }); var Who = React.createClass({ getInitialState:function(){ return {change:true}; }, eClick:function(){ this.setState({change:!this.state.change}); }, render:function(){ var name = this.state.change ? 'jzx' : 'sst'; return ( <div> <p onClick={this.eClick}>who is {name}?</p> {/*这里的点击事件不能写成onClick="this.eClick"---标签内注释需要写在大括号里*/} <MyName name={name} /> <MyHobby hobby={this.props.hobby} /> </div> ); } }); ReactDOM.render( <Who hobby="game" />, document.getElementById("example") //这里最后也不能加 ; 符号,我总是惯性的加上 ); </script> </body></html>
梳理下上面的代码的逻辑,先声明了三个组件类,前两个组件类各返回一个p标签,表明一个人的名字和爱好,名字和爱好都是在实例中传递给他们的,使用this.props. 获取。第三个组件类较复杂一点,主要是在render函数中实例化了前面两个组件类,并传递了信息给他们,并且设置了初始化状态函数和点击事件函数,当点击事件触发,就改变组件的change状态,由于组件render函数中某一部分内容是根据change状态的值来渲染的,所以当点击事件发生时,渲染的内容也会产生改变,大致就是这么回事了~~~
如果发现错误,请在评论中告诉我,谢谢!!!
- react近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 近期总结
- 如何选择深度学习模型
- 嵌入式学习日记(一)
- redis 第一篇(redis服务器搭建安装)
- javascript---bind的实现方法
- 美团-平均年龄-Java
- react近期总结
- 命名空间
- Python XML解析之DOM
- 浅析结构体
- android app记录运行日志 捕获奔溃异常 ,存储日志到文件
- c++ stream
- bzoj4503 两个串
- servlet中的几个类--ServletConfig&ServletContext(页面访问量的功能实现)
- Mac配置php.ini文件,连接mysql数据库