zoukankan      html  css  js  c++  java
  • react入门系列之react特点归纳

    声明式开发

    • 命令式开发:原生js和jq写代码的时候,大部分代码都是在操作dom,这种开发模式就是命令式开发。
    • 声明式开发:react是面向数据编程,不需要直接去控制dom,你只要把数据操作好,react自己回去帮你操作dom,可以节省很多操作dom的代码。这就是声明式开发。

    可以和其他框架并存

    • react所控制的dom就是id为root的dom,页面上的其他dom元素你页可以使用jq等其他框架。所以react是可以和其他框架并存的。

    组件化

    • 在我们写todo-list的时候,我们已经使用react的组件了。通过继承react的Component去创建一个组件。

    单向数据流

    • react是单向数据流,父组件传递给子组件的数据,子组件能够使用,但是不能直接通过this.props修改。否则会报错。(cannot assign to read only property ‘xxx’ of object ‘#object’)
    • 子组件要传值给父组件,或者要修改父组件的代码,都是要通过父组件传递过来的方法去实现。
    • 这样的好处在于,让数据清晰代码容易维护,如果每个子组件都能直接修改父组件的数据,当子组件躲起来代码维护起来很麻烦。

    react是视图层框架

    • 结合上面讲的单向数据流,如果是大型项目,非常多的子组件,要修改一个公共的参数,就需要很多层的传递才能完成一个数据变更。
    • 单单react去做大型项目是不够的,他优势在于视图层的渲染,涉及到复杂的数据传递,还需要结合其他数据层的框架开发。如mox-box,redux。

    函数式编程

    • react项目中大部分都是函数,连html都是由render函数去实现的。
    • 他的优势在于,方便代码维护,复杂的函数可以拆分成多个函数。
    • 在前端自动化测试也很方便,只需要给函数一个参数,看他的输出就可以了。

    react开发调试工具

    • react Developer Tools (需要FQ,在谷歌浏览器应用商店)

    propTypes 与 DefaultProps

    • value: PropTypes.string.isRequired --> value是父组件传递过来的参数,子组件规定value必须是字符串,并且必须传递(isRequired)
    • deletItem: PropTypes.arrayOf(PropTypes.string,PropTypes.func) --> deletItem必须是方法,或者字符串
    • 更多类型参考官方文档 -->这里就不留地址了,留地址会被锁定。
    import React, {Component, Fragment} from 'react';
    import PropTypes from 'prop-types'; //引入propTypes
    class Item extends Component {
        deletItem = () => {
            const { deletItem, index } = this.props;
            deletItem(index);
        }
        render(){
            const { value } = this.props
            return(
                <Fragment>
                    <div
                    onClick = {this.deletItem}
                    >
                    {value}
                    </div>
                </Fragment>
            )
        }
    }
    Item.prototypes = {
        test: PropTypes.string.isRequired,
        value: PropTypes.string.isRequired,//定义传递过来的value参数必须是字符串
        deletItem: PropTypes.arrayOf(PropTypes.string,PropTypes.number),// 必须是方法或者字符串的数组
        deletTtem: PropTypes.oneOfType([
            PropTypes.string,
            PropTypes.number,
            PropTypes.instanceOf(Message)
         ]),// 必须是这些类型的中的一个。
        index: PropTypes.number // 必须是数字
    }
    Item.defaultProps = {
        test: 'defaultProps' // 为test设置默认值,如果没有传入test,就使用这个默认值
    }
    export default Item
    

    Props,State 与 Render 函数之间的关系

    • 数据变化为什么视图会变化?
    • react的视图是通过Render函数去渲染的,组件当中,如果Props或者State有变化,Render函数就会重新执行一次。
    • 父组件的Render重新执行,对应的他的子组件中的Render也会重新执行。
  • 相关阅读:
    Python中所有的关键字
    关于selenium的8种元素定位
    对提示框的操作
    selenium+webservice进行百度登录
    MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled...报错解决
    Vue中使用echarts
    npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142解决方法
    插入排序
    冒泡排序优化
    roject 'org.springframework.boot:spring-boot-starter-parent:XXX' not found 解决
  • 原文地址:https://www.cnblogs.com/boye-1990/p/11378552.html
Copyright © 2011-2022 走看看