React-Native入门指南

第六篇JSX在React-Native中的应用

一、JSX概述

  1. 你一定疑问为什么要用JSX?其实这不是必需,而是建议。只是因为React是作为MVC中的V,是为UI而生,所以,React-Native使用JSX更能像HTML样表达树形结构,其实HTML的超类就是XML,React-Native将这个带到了解放前,不可否认的是JSX相比节省了很多的代码。JSX不是什么新奇的东西,JSX只是对JavaScript进行了拓展,仅此而已。

二、语法介绍

  1. 1、类XML UI组件表达,在React-Native中表现为:
  2. render: function() {
  3. return (
  4. <View style={styles.container}>
  5. <Text style={styles.welcome}>
  6. Welcome to React Native!
  7. </Text>
  8. </View>
  9. );
  10. }
  11. 2js表达式
  12. JSX中,表达式需要{}包裹,例如:
  13. render: function() {
  14. return (
  15. <View style={styles.container}>
  16. <Text style={styles.welcome}>
  17. {0? '第一段': '第二段'}
  18. </Text>
  19. </View>
  20. );
  21. }
  22. 上面的代码我们可以看出,style={}是一个表达式;{0? '第一段': '第二段'}是表达式,最后显示的应该是“第二段”。
  23. 3、属性
  24. HTML中,属性可以是任何值,例如:<div tagid="00_1"></div>,tagid就是属性;同样,在组件上可以使用属性。
  25. 建议使用以下方式:
  26. var props = {
  27. tagid: 'GGFSJGFFATQ',
  28. poiname: '东方明珠'
  29. };
  30. return (<View {...props}></View>);
  31. 4、如果需要在调用组件的时候动态增加或者覆盖属性,又该如何呢?
  32. 很简单:<View {...props} poiname={'虹桥机场'}></View>
  33. 5、关于样式
  34. 1)普通内联样式:{{}},第一层{}是表达式,第二层{}是js对象;
  35. <View style={{fontSize:40, width:80,}}> </View>
  36. 2)调用样式表:{样式类.属性}
  37. <View style={styles.container}></View>
  38. 3)样式表和内联样式共存:{[]}
  39. <View style={[styles.container, {fontSize:40, width:80}]}>
  40. 4)多个样式表:{[样式类1 样式类2]}
  41. <View style={[styles.container, styles.color]}>
  42. 6、属性校验
  43. 为了实现强类型语言的效果,我们可以使用propTypes来声明数据属性的合法性校验。例如:
  44. React.createClass({
  45. porpTypes:{
  46. username: React.PropTypes.string,
  47. age: React.propTypes.number,
  48. }
  49. });
  50. 7、设定默认属性
  51. React.createClass({
  52. getDefaultProps: function(){
  53. return {
  54. sign: '这个家伙很懒,什么都没留下'
  55. };
  56. }
  57. });
  58. 8、组件的生命周期
  59. componentWillMount:组件创建之前
  60. getInitialState:初始化状态
  61. render:渲染视图
  62. componentDidMount:渲染视图完成后
  63. componentWillUnmount:组件被卸载之前

三、了解虚拟DOM

  1. React进行了虚拟DOM的封装,所有的视图的更新都是虚拟DOM做了一个校验(diff)后最小更新。为什么这么做,因为现在机器的内存已经足以支撑这样视图UIdiff计算,用内存计算换取UI渲染效率。
  2. 1、我们需要获取组件中真实的dom
  3. React.findDOMNode(component)
  4. 2、第二节已经简单说了组件的生命周期(will, did
  5. 组件的生命周期分为3个部分:
  6. Mounting:正在装载组件;
  7. Updating:重新计算渲染组件;
  8. Unmounting:卸载组件