• 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也会重新执行。
  • 相关阅读:
    关于在Websphere下程序找不到jar包内.properties文件的问题
    MysqL的root用户不允许远程连接
    ajax提交表单数据到controller
    js表单验证
    jq删除标签中的元素
    点击超链接触发js事件
    spring的特点
    mysql每个jar包的作用
    抽象工厂举例
    简单的省市联动
  • 原文地址:https://www.cnblogs.com/boye-1990/p/11378552.html
Copyright © 2020-2023  润新知