Skip to content

fix(core - patch):when before patch: old keys like [a, b, c ...] new … #13112

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

sam0212
Copy link

@sam0212 sam0212 commented Nov 3, 2023

…keys like [d, b, b, e, ....], when patch the second key "b" Vnode by new children, the vnodeToMove will be undefined, so need add a condition for vnodeToMove

fix an error when diff patch, when before patch: old keys like [a, b, c ...] new keys like [d, b, b, e, ....], when patch the second key "b" Vnode by new children, the vnodeToMove will be undefined, so need add a condition for vnodeToMove

What kind of change does this PR introduce? (check at least one)

  • Bugfix
  • Feature
  • Code style update
  • Refactor
  • Build-related changes
  • Other, please describe:

Does this PR introduce a breaking change? (check one)

  • Yes
  • No

If yes, please describe the impact and migration path for existing applications:

The PR fulfills these requirements:

If adding a new feature, the PR's description includes:

  • A convincing reason for adding this feature (to avoid wasting your time, it's best to open a suggestion issue first and wait for approval before working on it)

Other information:

…keys like [d, b, b, e, ....], when patch the second key "b" Vnode by new children, the vnodeToMove will be undefined, so need add a condition for vnodeToMove

fix an error when diff patch, when before patch: old keys like [a, b, c ...] new keys like [d, b, b, e, ....], when patch the second key "b" Vnode by new children, the vnodeToMove will be undefined, so need add a condition for vnodeToMove
@sam0212
Copy link
Author

sam0212 commented Nov 4, 2023

// PatchChild.vue
<template>
  <div>
    {{ data.key }}
  </div>
</template>

<script>
export default {
  props: {
    data: {
      type: Object,
      required: true,
    },
  },
};
</script>
// Wrapper.vue
<template>
  <div>
    <div>
      <PatchChild v-for="item in list" :key="item.key" :data="item" />
    </div>
    <div><button @click="changeList">changeList</button></div>
  </div>
</template>

<script>
import PatchChild from './PatchChild.vue';

export default {
  components: {
    PatchChild,
  },
  data() {
    return {
      list: [
        {
          key: 'A',
        },
        {
          key: 'B',
        },
        {
          key: 'C',
        },
      ],
    };
  },
  methods: {
    changeList() {
      this.list = [
        {
          key: 'D',
        },
        {
          key: 'B',
        },
        {
          key: 'B',
        },
        {
          key: 'E',
        },
      ];
    },
  },
};
</script>

@posva
Copy link
Member

posva commented Nov 4, 2023

Keys cannot be repeated. Normally there is already an error for this but this shouldn’t be « fixed ». It’s supposed not to work

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants