vue中页面渲染问题

目前有很多页面渲染在修改数据过后需要刷新一次,或几次的情况,我分享我遇到这个问题时时怎么解决的。

<template>
    <div>

        <div id="Myimg">
            <van-uploader :after-read="afterRead" v-model="fileList" name="image">
                <van-image width="100" height="100" :src="headImage" />
            </van-uploader>



        </div>

        <van-form @submit="onSubmit">
            <van-field v-model="phone" name="用户名" placeholder="用户名" />
            <van-field v-model="nickname" name="nickname" placeholder="昵称" />
            <van-field v-model="weight" name="weight" placeholder="体重" />
            <van-field v-model="height" name="height" placeholder="身高" />
            <van-field name="radio" label="单选框">
                <template #input>
                    <van-radio-group v-model="sex" direction="horizontal">
                        <van-radio :name="1">男</van-radio>
                        <van-radio :name="0">女</van-radio>
                    </van-radio-group>
                </template>
            </van-field>


            <div style="margin: 16px;">
                <van-button round block type="info" native-type="submit" @click="updataUser()">提交</van-button>
            </div>
        </van-form>
    </div>
</template>

上面这一段时组件的页面代码

下面是对页面的数据的动态渲染

<script>
import Vue from 'vue';
import { Toast } from 'vant';
import { mapActions } from 'vuex'
import { Uploader } from 'vant';
Vue.use(Uploader);

export default {
    name: 'Sec3JianshenfangMyDataView',

    data() {
        return {
            fileList: [],
            phone: "",
            password: '',
            nickname: '',
            weight: '',
            height: '',
            sex: '',
            headImage: ''


        };
    },

    mounted() {
        console.log("mounted");
        this.getUserList()//挂载完成时获取USerlist
    },

    methods: {
        ...mapActions("AppUserOption", ['AppUser']),
        ...mapActions("updataAppUserOption", ['updataAppUser']),
        ...mapActions("AppHeadshotOption", ['AddHeadshot']),

        onSubmit(values) {
            console.log('submit', values)
        },
        onConfirm(value) {
            this.value = value;
            this.showPicker = false;
        },
        onConfirm_time(date) {
            this.value_time = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`;
            this.showCalendar = false;
        },
        afterRead(file) {//头像上传
            const forms = new FormData();
            forms.append("image", file.file);
            this.AddHeadshot([forms, this.imgHeadshot])
            // 此时可以自行将文件上传至服务器
        },
        //页面的渲染
        displayMyData() {
            let data = JSON.parse(localStorage.getItem("vuex"))
            this.phone = data.AppLoginOption.user.phone
            this.nickname = data.AppUserOption.User.nickname
            this.height = data.AppUserOption.User.height
            this.sex = data.AppUserOption.User.sex
            this.weight = data.AppUserOption.User.weight
            this.headImage = data.AppHeadshotOption.Headshot.image

        },
        getUserList() {//通过ID发起请求拿到后台UserList
            console.log("getUserlist")
            let data = JSON.parse(localStorage.getItem("vuex"))//在本地储存中拿到数据
            let id = data.AppLoginOption.user.id//拿到需要的ID
            this.AppUser([id, this.displayMyData])//调用vuex中actions方法,传回参数以及回调函数
            

//渲染问题也就是出现在这里,如果把displayMyData()这个方法卸载挂载后,数据渲染是会失败的,需要刷新页面两次,
            


//所以需要把他当一个回调函数在发起请求后在来执行这个函数,那么数据就可以动态渲染,不会出现需要页面刷新的情况
            //this.displayMyData();
        },
        updataUser() {//修改页面数据事件
            let data = JSON.parse(localStorage.getItem("vuex"))
            let id = data.AppLoginOption.user.id
            this.updataAppUser([id, this.height, this.nickname, this.sex, this.weight, this.headImage, this.updata])
        },
        updata(res) {
            if (res.data.code == 200) {
                Toast.success('保存成功')
                // this.displayupdataMydata()

            }
        },
        imgHeadshot(res) {
            if (res.data.code == 200) {
                Toast.success('上传成功')
            }
        }

    },
};
</script>

上面不管是把渲染方法写在mounted()中还是卸载,getUserList()中都是需要刷新的,这个原因是因为我是从本地储存中拿去数据,本地储存在我修改数据过后需要重新在vuex拿去数据,第一次刷新,本地储存数据修改,但是在修改之前页面已经渲染了,所以需要二次刷新页面才会刷新成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值