• react使用脚手架开发


    由于公司是外包性质,项目老是vue框架和react框架交替着开发,导致开发一段时间vue又把react的东西忘记了,反之亦然。所以在这里记录下react的开发简要,方便以后查询。

      脚手架相关

      react采用的是自己开发的脚手架:create-react-app,全局安装,然后键入dos命令:create-react-app (项目文件夹) 即可初始化react脚手架项目包,但是注意下载源和npm版本

    过低都会造成依赖模块丢失或者下载不了的问题,建议源切换为国外的。这里推荐一款npm下载源管理的工具: nrm(具体使用方法:https://www.npmjs.com/package/nrm)

      es6相关

      由于项目大部分都是采用es6~es7语法开发了,react关于es6的语法 : https://babeljs.io/blog/2015/06/07/react-on-es6-plus,兼容性就找babel-polyfill吧

      react入门相关

      react中的组件分为普通组件和容器组件(我理解为业务组件),普通组件只负责简单的数据渲染,不做逻辑处理,最简单的组件可以这样写:

     1 // 这样就相当于一个普通组件了
     2 const Test = (props) => <div>测试组件</div>
     3 
     4 export default class Main extends Component {
     5   render () {
     6     return (
     7       <Test></Test>
     8     )
     9   }
    10 }

      容器组件一般的结构:

     1 // 容器组件
     2 export default class Main extends Component {
     3   // 构造函数
     4   constructor (props) {
     5     super(props)
     6 
     7     // 初始化组件数据
     8     this.state = {}
     9   }
    10 
    11   // 默认传值
    12   static defaultProps: {}
    13 
    14   // 生命周期
    15   // 请求数据
    16   componentDidMount () {}
    17 
    18   // 事件数据
    19   handleSome () {}
    20 
    21   // 渲染
    22   render () {
    23     return (
    24       <Test></Test>
    25     )
    26   }
    27 
    28 }

      跟着说react开发中要注意的地方:

      1.jsx是一种js的扩展语法,可以理解为具有模板能力和js所有功能的组。JSX 表达式就变成了常规的 JavaScript 对象,Babel将jsx编译的例子:

     1 const element = (
     2   <h1 className="greeting">
     3     Hello, world!
     4   </h1>
     5 );
     6 
     7 const element = React.createElement(
     8   'h1',
     9   {className: 'greeting'},
    10   'Hello, world!'
    11 );
    12 
    13 /**
    14  *   <h1 className="greeting">
    15  *       Hello, world!
    16  *   </h1>
    17  *   这样的模板片段等同于
    18  */
    19 const element = {
    20   type: 'h1',
    21   props: {
    22     className: 'greeting',
    23     children: 'Hello, world'
    24   }
    25 };

      2.this.props.children

      这个东西我的理解为一个插槽,在组件传值的时候,容器组件包含的组件。

      3.获取dom,和vue的$refs索引一个用法,做个备忘

      4.proptypes校验props,是否必须存在,为什么类型

      但是react15.5版本之后,proptypes成为了一个单独的模块,所以要先下载依赖 prop-types再去使用

    1 // PropTypes用于验证props的传值
    2 Test.propTypes = {
    3   name: Proptypes.string.isRequired
    4 }

       5.关于react的列表渲染

      react的列表渲染,必须向子组件传递一个key的props。官方的解释是:React 使用这个 key 去比较原来的树的子节点和之后树的子节点。我的理解为,方便dom的索引,提高渲染效率,如果没有这个key则会去比较两棵dom树。

      注:key的声明必须在使用组件的时候

    1 // key的取值一般为数据中的索引值index
    2 const numbers = [1, 2, 3, 4, 5];
    3 const listItems = numbers.map((number, index) =>
    4   <li key={index}>
    5     {number}
    6   </li>
    7 );

       6.利用context进行越级组件传递props

      使用context可以获取到祖先元素中的数据,避免多层传递的麻烦。

     1 // 祖先组件
     2 class Parent extends Component {
     3   getChildContext () {
     4     return {
     5       text: '祖先组件中的文本'
     6     }
     7   }
     8 
     9   render () {
    10     const Parent = this
    11     return (
    12       <div>
    13         <ContextTest></ContextTest>
    14       </div>
    15     )
    16   }
    17 }
    18 
    19 Parent.childContextTypes = {
    20   text: Proptypes.string
    21 }
    22 
    23 // 中间件
    24 const ContextTest = (props) => {
    25   return (
    26     <div>
    27       <Child></Child>
    28     </div>
    29   )  
    30 }
    31 
    32 // 底层组件
    33 // class Child extends Component {
    34 //   render () {
    35 //     return (
    36 //       <div>
    37 //         {this.context.text}
    38 //       </div>
    39 //     )
    40 //   }
    41 // }
    42 
    43 const Child = (props, context) => {
    44   return (
    45     <div>
    46       {context.text}
    47     </div>
    48   )
    49 }
    50 
    51 Child.contextTypes = {
    52   text: Proptypes.string.isRequired
    53 }
  • 相关阅读:
    AndRodi Strudio中的按钮时件
    Intent(三)向下一个活动传递数据
    Intent(二)隐式调用intent
    用PopupWindow做下拉框
    环形进度条
    Android Studio分类整理res/Layout中的布局文件(创建子目录)
    Android无需申请权限拨打电话
    使用ViewPager切换Fragment时,防止频繁调用OnCreatView
    定制 黑色描边、白色背景、带圆角 的背景
    Android 底部弹出Dialog(横向满屏)
  • 原文地址:https://www.cnblogs.com/xiyangcai/p/8665492.html
Copyright © 2020-2023  润新知