在VUE中切换样式时,边框样式无法正确呈现

Ian*_*ong 5 javascript css vue.js virtual-dom

在下面查看此演示

new Vue({
	el: '#app',
  data: {
  	flag: true
  },
  computed: {
  	style() {
      let styleA  = {
          borderBottom: '1px solid red',
          borderRight: '1px solid red'
       };
       
      let styleB = {
        	border: '1px solid green',
          borderRight: '1px solid red'
      }

      return this.flag ? styleA : styleB
     
    }
  },
  methods: {
  	changeStyle() {
    	this.flag = !this.flag;
    }
  }
})
Run Code Online (Sandbox Code Playgroud)
.box {
  width: 100px;
  height: 100px;
}
Run Code Online (Sandbox Code Playgroud)
<html>
  <header>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
  </header>
  <body>
    <div id="app">
      <div class="box" :style="style"></div>
      <button @click="changeStyle">changeStyle</button>
    </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

在此演示中,单击changeStyle按钮可以切换两种不同的样式。

这是步骤:

  • 首先,styleA被施加red borderBottomred borderRight
  • 单击changeStyle按钮styleB已应用,green border并且red borderRight是预期的,但仅green border显示。

  • changeStyle如我们所见,再次单击按钮,仅red borderBottom显示,就像red borderRight消失一样。

  • 再次单击,您将永远不会看到 red borderRight

比较虚拟节点和渲染是否有问题VUE

Jac*_*Goh 4

我真的不知道为什么会发生这种情况。

正如你所说,虚拟 DOM 可能有问题。

根据我的经验,当 Vue 中 DOM 渲染出现问题时,使用key可以解决问题。就你而言,确实如此。https://jsfiddle.net/jacobgoh101/Ld5e8azs/

只需添加key动态样式的div即可

<div class="box" :style="style" :key="style"></div>
Run Code Online (Sandbox Code Playgroud)

key只需要能够区分这两种风格的任何独特值