zoukankan      html  css  js  c++  java
  • RN setState 采坑小记

    项目中我们基本上一直使用这个东东,一般我们用来刷新数据(刷新页面),下面来小记下这个小坑

    一般对页面来说 我们如是使用

    第一种写法 声明、初始化分开

    // 1、声明
    export interface IState { bidBtnData: getBidButtonData, bidBean: IBidDetailInfo, } export interface IProps extends IBasePageProp { }
    export default class extends UtilsRootPage<IProps, IState> { //该方法 相当于constructor 初始化方法

    subPageInit() {
    // 2、初始化
            this.state = {
                bidBean: {} as IBidDetailInfo,
                bidBtnData: {} as getBidButtonData,
            }
    
        }
    // 3、赋值
        this.setState({ bidBean: response.data })
     

    第二种写法 直接声明、初始化

    export default class CheckboxModalMenu extends React.Component<IProps> {
    // 1、声明、初始化 state
    = { modalVisible: false, data: [], bidderIdList: [], };
    // 2、使用
      this.setState({ data: res.data.rows });
     

    小坑小记:setState是异步操作 所以出现赋值异常时 用方法2解决

                                    let oData: any = this.state.data;
                                    let oNew: any = [];
                                    oData.map((fItem: any) => {
                                        if (fItem.checkedflag) {
                                            oNew.push(fItem.userId);
                                        }  
                                    });
                                    // UtilsSuperCommon.logWarn(oNew);
                                    // oNew始终有值 第一次bidderIdList取不到值 第二次才有 这是因为setState是异步操作 
                                    // 所以用第二种写法 数据回来后再做操作
                                    // 1、
                                    // this.setState({
                                    //     bidderIdList: oNew, 
                                    // }
                                    //2、 该操作是异步操作
                                    this.setState({
                                        bidderIdList: oNew,
                                    }, ()=> {
                                        if (this.state.bidderIdList && this.state.bidderIdList.length) {
                                            this.setModalVisible(false);
                                            this.props.onClickDone(this, this.state.bidderIdList);
                                        } else {
                                            Toast.info('请选择中标人', 1)
                                        }
                                    })
                                    // UtilsSuperCommon.logWarn(this.state.bidderIdList);
  • 相关阅读:
    How can i install ctags in centos 6.4
    [转载] Ubuntu Vim powerline 插件
    Vim 相关网页
    [转载] vim技巧:设置空格和Tab字符可见
    Don't trust cplusplus.com, it's crap. If any, go to cppreference.com.
    Vim yank only 50 lines
    按进程名终止进程
    Shell 脚本 Tips
    Bash 脚本 逐行处理文本文件的内容
    生成并配置https本地证书
  • 原文地址:https://www.cnblogs.com/lijianyi/p/11516410.html
Copyright © 2011-2022 走看看