diff --git a/src/swipe-item/index.js b/src/swipe-item/index.js index 9099ec32b..8039d0996 100644 --- a/src/swipe-item/index.js +++ b/src/swipe-item/index.js @@ -9,6 +9,7 @@ export default createComponent({ data() { return { offset: 0, + inited: false, mounted: false, }; }, @@ -34,9 +35,9 @@ export default createComponent({ }, shouldRender() { - const { index, parent, mounted } = this; + const { index, inited, parent, mounted } = this; - if (!parent.lazyRender) { + if (!parent.lazyRender || inited) { return true; } @@ -49,8 +50,14 @@ export default createComponent({ const maxActive = parent.count - 1; const prevActive = active === 0 && parent.loop ? maxActive : active - 1; const nextActive = active === maxActive && parent.loop ? 0 : active + 1; + const shouldRender = + index === active || index === prevActive || index === nextActive; - return index === active || index === prevActive || index === nextActive; + if (shouldRender) { + this.inited = true; + } + + return shouldRender; }, }, diff --git a/src/swipe/test/index.spec.js b/src/swipe/test/index.spec.js index 613ca97a7..bf737c9fd 100644 --- a/src/swipe/test/index.spec.js +++ b/src/swipe/test/index.spec.js @@ -163,6 +163,7 @@ test('lazy-render prop', async () => { 2 3 4 + 5 `, data() { @@ -181,16 +182,13 @@ test('lazy-render prop', async () => { }); }; - expectRender([true, true, false, true]); + expectRender([true, true, false, false, true]); wrapper.setData({ active: 1 }); - expectRender([true, true, true, false]); + expectRender([true, true, true, false, true]); wrapper.setData({ active: 2 }); - expectRender([false, true, true, true]); - - wrapper.setData({ active: 3 }); - expectRender([true, false, true, true]); + expectRender([true, true, true, true, true]); }); test('lazy-render prop when loop is false', async () => { @@ -225,8 +223,5 @@ test('lazy-render prop when loop is false', async () => { expectRender([true, true, true, false]); wrapper.setData({ active: 2 }); - expectRender([false, true, true, true]); - - wrapper.setData({ active: 3 }); - expectRender([false, false, true, true]); + expectRender([true, true, true, true]); });