React Native学习笔记(2)--React与JSX语法
React 学习笔记一、ReactReact是由facebook开源的前端组件化框架,虽然当前对React的评论各式各样,但是就React专注的点来说(前端功能分解化,使得前端开发像搭积木一样快速并且易维护),还是得到了很多公司的青睐。1、React的特点:(1)React可以只作为视图在MVC中使用,这样可以很容易使用React在已有项目的基础之上进行开发(2) 虚拟DOM:这个是Reac
React 学习笔记
一、React
React是由facebook开源的前端组件化框架,虽然当前对React的评论各式各样,但是就React专注的点来说(前端功能分解化,使得前端开发像搭积木一样快速并且易维护),还是得到了很多公司的青睐。
1、React的特点:
(1) React可以只作为视图在MVC中使用,这样可以很容易使用React在已有项目的基础之上进行开发
(2) 虚拟DOM:这个是React的一个亮点,同时也是React高性能的核心。使用虚拟DOM可以将原本的HTML页面DOM更新的操作转移到内存中。通过在内存中的高效率计算,计算出最小的需要更新的DOM视图再进行更新,以完成整个组件的渲染。
(3)数据流:React使用单向数据流,相对于传统的数据绑定而言更加快捷,灵活。
2、React的HelloWorld
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React!</title>
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
var HelloWorld= React.createClass({
render: function() {
return (
<div>
Hello, world!
</div>
);
}
});
ReactDOM.render(
<HelloWorld/>,
document.getElementById('example')
);
</script>
</body>
</html>
上面的代码中,首先定义了一个HelloWorld的React组件,组件返回一个div,div中写了Hello, world!字符串。然后通过ReactDOM.render方法将HelloWorld组件渲染到body中Id为“example”的div中。
2、props属性传递
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React!</title>
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
var HelloWorld= React.createClass({
render: function() {
return (
<div>
Hello, world, {this.props.name}!
</div>
);
}
});
ReactDOM.render(
<HelloWorld name="Jason"/>,
document.getElementById('example')
);
</script>
</body>
</html>
上述代码与helloworld的代码几乎一样,唯一的区别是在Hello, world后面添加了一个名称,而这个名称是在ReactDOM.render渲染的时候通过name属性传进来的,所有在标签中出现的属性(如上面的name)都被赋值给了React组件内部的props对象。
- props用来向React组件传递属性,一般来说属性是组件天生的东西,在组件内部是不可以更改的。
3、state状态更新
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React!</title>
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="https://npmcdn.com/babel-core@5.8.38/browser.min.js"></script>
</head>
<body>
<div id="example"></div>
<script type="text/babel">
var HelloWorld= React.createClass({
getInitialState : function(){
return {
number: 0
}
},
render: function() {
return (
<div>
Hello, world! Number : {this.state.number}!
</div>
);
},
handleNumberAdd : function(){
this.setState({number : this.state.number + 1});
},
componentDidMount : function(){
setInterval(this.handleNumberAdd, 1000);
}
});
ReactDOM.render(
<HelloWorld name="Jason"/>,
document.getElementById('example')
);
</script>
</body>
</html>
上述代码中,在Hello, world后面添加了一个数字参数,这个参数的值时通过this.state.number
获取的,并且在componentDidMount 方法中有一个定时器,起作用是每隔1秒钟调用一次handleNumberAdd 方法,在handleNumberAdd 方法中则是将this.state.number的值加上1之后再赋值给number,那么this.setState是用来干嘛的呢?其实从字面意思就很容易理解,它其实就是用来更新React组件内部的state对象的。运行代码会很容易发现,在界面中每隔一秒钟Hello, world! Number : 0的值就会增加1,观察可以发现这个数值更新时浏览器并没有整体更新,这便是前面讲的虚拟DOM的作用了。
- state是用来向维持React组件当前时刻的状态的,一旦这个状态有变化,那么组件就会计算虚拟DOM并且重新渲染变化。
4、React常用函数
- (1)getDefaultProps:该方法用来设置React组件的默认属性,return一个js对象
- (2)getInitialState : 该方法用来设置React组件的默认状态,return一个js对象或者null
- (3)componentDidMount : 当组件渲染完毕之后调用
- (4)componentWillUnmount : 当组件即将销毁时调用
- (5)componentDidUpdate : 当组件更新完成之后调用
- (6)setState : 用来更新当前组件的状态
- (7)render : 用来返回需要渲染的内容
二、JXS
简单来讲,JSX其实就是js,只是jsx允许在js中写html代码。(上面介绍React的时候我们已经使用到了JSX的语法了)
例如:
render: function() {
return (
<div>
Hello, world! Number : {this.state.number}!
</div>
);
}
几个需要注意的地方:
- 1、在JSX中写class时要写成className,例如
<div className="test_class"></div>
- 2、在JSX中写内嵌样式style时,必须要使用对象。例如:
var style = { color : red }; <div style={style}></div>
- 3、JSX返回的HTML标签最外层只能有一个html标签。例如:
return (<div>
Hello, world! Number : {this.state.number}!
</div>)
是允许的,但是
return (<div>
Hello, world! Number : {this.state.number}!
</div>
<div>
Hello, world! Number : {this.state.number}!
</div>)
是不允许的。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)