• React Native 之文件内数据操作(var、let、const、static、Props、State、this)


    在React Native组件中,

    存放本组件相关信息,主要存放跟UI相关的变量,在本组件内可变,放在状态机中,

    存放本组件相关信息,主要来源父组件赋值,在本组件内不可变,放在属性变量中,

    逻辑相关全局访问,伴随页面生命周期(即页面销毁才销毁)的变量放在成员变量全局变量静态变量中,

    逻辑相关但只要局部访问,不伴随页面生命周期,随用随销(譬如函数结束即失效的)的变量放在局部变量中,

    不需要改变,但要多处使用的,放在常量中。

    下面从局部的、全局的两个角度探讨下这些数据操作

    一、局部

    (局部变量)let -- 块级作用域

    (声明的变量只在它所在的代码块有效)

    这个其实比较简单,就是局部变量,对任何一个比较长的运算结果,或者比较长的取值,

    我们都可以用一个局部变量来临时存储,需要就建,用完就销毁,一般我们在函数内部使用

    this.format = (labels: string[]) => {
                let kk = labels.join(' ')
                if (kk && kk.length) {
                    return kk
                } else {
                    return '工作'
                }
    
            };

    二、全局

    对于单个文件内的全局访问,我们从下面两个方面探讨

    <一>不可变

    1、(属性)Props -- 类级作用域(类内访问)

    2、(常量)const -- 文件级作用域(当前文件访问)

    <二>可变

    3、(状态机)State -- 类级作用域

    4、(全局变量)var -- 文件级作用域

    5、(静态变量)static -- 类级作用域+文件级作用域(取决于是否使用private字段)

    6、(成员变量)this -- 类级作用域

    下面我们逐一分析:

    1、(属性)props:

    父组件传递下来的属性放在属性变量中,特点是不可变不会重绘UI

    封装可复用的组件时,通过props将数据传递到组件内部(props在组件内部是不可变的,不会导致UI重绘)

    存放本组件的相关信息。在父组件中赋值之后,子组件直接取值使用。

    站在子组件的角度来看,父组件赋给的属性值是不变的

    综上:props 主要存放本组件相关信息,主要来源父组件赋值,在本组件内不可变

    定义:

    export interface IProps extends IBasePageProp {
        orgName: string,
    }

    使用:

    <Text style={style.item_right_title} numberOfLines={1}>{this.props.orgName}</Text>

    2、(常量)const

    顾名思义,声明后不可变

    定义:

    // 常量(当前文件有效)
    const chancedetailsViewCallback = 'chancedetailsViewCallback'
    export default class A extends UtilsRootPage<IProps, IState> {

    使用:

    subPageUnmount() {
            UtilsSuperBridge.getInstance().noticeRemoveLisenter(chancedetailsViewCallback);
        }

    3、(状态机)state

    与本组件显示有关的变量放在状态机,特点是可变,会重绘UI

    在RN中,如果组件使用state作为数据来源,由于系统会持续监控state,当state中的任何属性被改变时,组件都会被重绘,并触发render方法重绘UI。

    我们可以在数据变化之后调用this.setState来更新界面,而不是this.state={data:'new'},等号直接赋值符合编程语法,但是不会重绘界面。注意,setState这个方法不是即时生效

    由于state任何属性的改变都会导致UI重绘,而UI重绘会消耗系统资源,

    在封装可复用的组件时,尽量不用或少用state,而是通过props实现。

    综上:state 存放本组件相关信息,主要存放跟UI相关变量,在本组件内可变

    声明:

    export interface IState {
    
        hotname: string,
    }

    初始化:

    this.state = {
                hotname: '角色',
    
            }

    更新:

    this.setState({ hotname:'123' })

    使用:

    this.state.hotname

    4、(全局变量)var

    能够在当前文件全局访问的变量,

    主要处理与组件逻辑控制相关与组件显示无关的变量

    定义:

    //  全部变量(当前文件有效)
    var gest:string
    var yest:string = 'red'
    export default class A extends UtilsRootPage<IProps, IState> {

    更新:

    // 全局变量
            gest='345'
            yest='blue'

    使用:

    item_center_bg: {
            backgroundColor: yest,
           
        },

    5、(静态变量)static:

    类内访问+当前文件访问,取决于是否使用private字段

    主要处理与组件逻辑控制相关但与组件显示无关的变量,

    作用类似全局变量,只是使用方式不同,通过添加private字段,可以使其仅能类内访问

    定义:

    export default class A extends UtilsRootPage<IProps, IState> {
        //  声明
        // 静态变量
        static fast:string // 未初始化 (当前文件有效)
        private static last:string = '88' // 初始化 (只能类内访问)
        static st:string = '88' // 初始化 (当前文件有效)

    更新值:

    //  更新值
            // 静态变量
            A.last = '123'

    使用:

    console.warn(yest+this.xest+A.last)

    6、(成员变量)this

    主要处理与组件逻辑控制相关但与组件显示无关的变量,

    作用类似全局变量、静态变量,只是使用方式不同,仅限类内访问

    定义:

    // 成员变量 (只能类内访问)
        cest:string | undefined
        private test:string | undefined = ''
        private xest:string = '8888' 
        private dast!: string;

    更新值:

    // 成员变量
            this.test='234'
            this.dast='456'

    使用:

    console.warn(A.last+this.test+gest)

    参考:https://blog.csdn.net/wangpotongxue/article/details/99972076

  • 相关阅读:
    20169207 2016-2017-2 《移动平台应用开发实践》第五周学习总结
    20169212 2016-2017-2《网络攻防实践》第八周学习总结
    20169212 2016-2017-2 《网络攻防实践》第七周学习总结
    20169212 2016-2017-2 《网络攻防实践》第六周学习总结
    20169212 2016-2017-2 《网络攻防实践》第五周学习总结
    20169212 2016-2017-2 《网络攻防实践》第四周学习总结
    20169212 2016-2017-2 《网络攻防实践》第三周学习总结
    20169212 2016-2017-2 《网络攻防实践》第二周学习总结
    20169212《网络攻防实践》第一周学习总结
    20169212《Linux内核原理与分析》课程总结
  • 原文地址:https://www.cnblogs.com/lijianyi/p/14336487.html
Copyright © 2020-2023  润新知