react 如何处理页面加载时无法将获取缓存信息存入全局变量中

最近在做一个权限功能时,发现在读取用户公司ID进行列表查询 时,无法钭读取到缓存中的数据存入页面全局变量中进行加载查询

 

将问题代码整理出来

将信息存入缓存:

let menuList = Helper.getUserInfo();
localStorage.setItem('_io_iframe_admin_menu_list_key_', JSON.stringify(menuList));

 

读取缓存,加载前存入param变量中给请求作参数用

import React from 'react';
import { Form,Input,Button,Popconfirm,Select,DatePicker } from 'antd';

let prolist = LocalService.getUserInfo() && JSON.parse(LocalService.getUserInfo()) || [] ;


let order =  React.createClass({
    mixins: [LoadingMixin,NotificationMixin,RequestMixin],
    getInitialState(){
        return {
            data: [],
            param:{},
        }
    },
    componentWillMount(){
        if(prolist){
            var param ={}
            param.companyid = prolist.cid
            this.setState({param: param || []});
        }
        this.getlists()
    },
    getlists(){
        this.get({ 
            url: "Api/lists/****",
            param: {
                companyid:this.state.param && this.state.param.companyid || ''
            },
            noLoading: true
        }).then(result=> {
            this.setState({data: result.result || []});
        });
    },
    
    ...
    
});

 

 

此时缓存中能取到数据,但get请求中参数却为空

原因在于get异步请求时,变量存储动作还未完成,

可将存储动作在getInitialState()生命周期内完成,则在componentWillMount()生命周期中调取get请求就能正常获取变量参数了

 1 import React from 'react';
 2 import { Form,Input,Button,Popconfirm,Select,DatePicker } from 'antd';
 3 
 4 let prolist = LocalService.getUserInfo() && JSON.parse(LocalService.getUserInfo()) || [] ;
 5 let paraming ={}
 6 paraming.companyid = prolist.cid
 7 
 8 let order =  React.createClass({
 9     mixins: [LoadingMixin,NotificationMixin,RequestMixin],
10     getInitialState(){
11         return {
12             data: [],
13             param:paraming && paraming || {},
14         }
15     },
16     componentWillMount(){
17         this.getlists()
18     },
19     getlists(){
20         this.get({ 
21             url: "Api/lists/****",
22             param: {
23                 companyid:this.state.param && this.state.param.companyid || ''
24             },
25             noLoading: true
26         }).then(result=> {
27             this.setState({data: result.result || []});
28         });
29     },
30     
31     ...
32     
33 });

 

posted @ 2019-02-22 16:40  知兮  阅读(584)  评论(0编辑  收藏  举报