账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vuex中使用push给数组增加数据,会增加两条相同的数据
    35
    0

    只是执行了一次push,为何会向数组里push两条相同的数据呢。
    百思不得其解。

    
    (this.state.updateTripInfoObj.people.data).push(obj); // 这里
    this.state.travellerInfo.after.temporary.people.data.push(obj);
    
    commit('setTripInfoObj', {
        type: 'people',
        res: this.state.updateTripInfoObj.people.data,
    });
    commit('setTravellerInfo', this.state.travellerInfo);

    setTripInfoObj 只会做赋值操作

    setTripInfoObj(state, payload) {
        if (payload.type === 'people') {
            state.updateTripInfoObj.people.data = payload.res;
        } else {
            const { address, people, stroke, take } = payload;
            state.updateTripInfoObj = {
                people: people || [],
                stroke: stroke || {},
                address: address || [],
                take: take || {},
            };
        }
    },
    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 執傘待亽歸 普通会员 1楼

      在Vue中,当使用push方法向数组中添加元素时,Vue.js会自动将元素添加到数组的末尾,不会在原数组中直接添加。这是因为Vue.js使用了$push方法作为数据操作的逻辑,而不是使用push方法。

      如果你想在原数组中添加元素,你需要使用Vue.splice方法。例如:

      javascript this.array.push('新的数据');

      这将会在原数组中添加一条新的数据,而不会改变原数组的长度。

      另外,Vue.js使用了虚拟DOM,即使你没有使用push方法,Vue.js也会自动更新DOM,这可能会导致添加数据后的元素和原数组中的元素在DOM上显示的位置不同。这是因为Vue.js在更新DOM时,会保留元素的原始顺序,即使它们的位置发生了变化。

      如果你想在更新DOM时只改变元素的位置,而不是添加新的元素,你需要使用Vue.nextTicksetTimeout等方法。例如:

      javascript this.$nextTick(() => { this.array.push('新的数据'); });

      这将会在setTimeout$nextTick调用之后,自动更新DOM,但不会添加新的元素。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部