我使用一个简单的名为binary_state
的二进制Vue变量来控制元素的类,在本问题的其余部分中,该按钮名为“controlled_element”。“controlled_element”有两个类“class_true”和“class_fasle”,由binary_state
的值确定。binary_state
的值本身使用页面上的按钮在true和false之间切换。我们将该按钮称为“控制_元素”。
每次使用“controlling_element”更改binary_state
的值时,更新后的值都会发送到服务器。另一方面,每次刷新页面时,都会从服务器获取binary_state
的更新值。一旦发生这种情况,“controlled_element”的类也会进行调整。
这是一个非常简单的场景,现在考虑以下步骤:
1.刷新页面,从服务器获取新值binary_state
,为简单起见,假设新值为true
,即binary_state=true
,这将把“controlled_element”的类设置为“class_true”。
1.按下“控制元素”奇数次。这将分别设置binary_state
和“受控元素”的类为“假”和“类假”。
1.使用浏览器的后退箭头(按钮)离开页面并返回到该页面。
1.我希望binary_state
的值继续为false
,这 * 看起来 * 是实际情况,正如Vue devtool插件所示。
1.我还期望“controlled_element”的类继续为“class_false”,但是,令我惊讶的是,该类为“class_true”,这是从服务器接收到的最新值,而不管在步骤2中应用了哪些更改。
请注意,当导航回页面时,binary_state
和“controlled_element”类之间的同步(React性)被违反:如上面的步骤4所述,binary_state
的值继续为false(如Vue devtool插件所指示的),但“controlled_element”的类为“class_true”。
**注意。*我在chrome(版本108.0.5359.125(官方版本)(64位))和Edge(版本108.0.1462.76(官方版本)(64位))中看到过这个问题,但在Firefox(版本108.01.1(64位))中, 一切 * 都很好。
最后三点。
- 我看过这个相关的question。作者表示他们能够通过设置表单的
autocomplete="on"
来解决这个问题。我不确定这是否对我有帮助,因为我开始没有表单。 - 我看到了一些关于使用
vuex
或localStorage
的建议,但我不确定在我的情况下是否有必要这样做,因为正如第4步中提到的,Vue值binary_state
似乎具有正确的值。 - 我 * 不 * 使用
vue-router
,如果这与这个主题有关的话。
2条答案
按热度按时间js81xvg61#
好吧,老实说,根据您使用的vue版本,我有一些建议,例如,如果您使用
Vue2
或Vue3
与cli,您的状态管理问题可以使用Vuex
解决(但是现在vuex
不再是官方推荐的状态管理系统).如果您使用Vue3
,最好的解决方案是是与Pinia
https://pinia.vuejs.org一起使用,与Vuex
相比,Pinia
非常有帮助,非常现代,而且令人惊讶地更容易学习和使用。https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
localStorage
是一种替代解决方案,但代价是您必须编写代码来擦除该localStorage
。https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage
sessionStorage
类似于localStorage
,但在窗口关闭后会自动擦除数据。ulydmbyx2#
我解决这个问题的方法是,当用户使用浏览器的后退/前进按钮访问页面时,手动重新加载页面。
这不是最好的解决方案,但考虑到我的时间限制,我想我应该尝试一下,我想在使用建议的
localStorage
、sessionStorage
和Piani
解决方案之前还需要一些学习,因为我不确定如何使用这些技术重新启动Vue双向绑定。