TGTGInsighttelegram intelligenceLIVE / telegram public index
Post content
帖子内容
前端开发时要考虑的东西好多啊,我最近才意识到自己之前开发的东西都存在这样一类 bug:使用浏览器的“后退”“前进”功能,或者“恢复关闭的标签页”功能时,可能会产生输入控件看起来已经填写了内容,但 JS 框架(Vue.js 和 React 都有此问题)则认为内容为空(或者 JS 代码中设置的默认值)的情况。如果在这种情况下直接提交表单,由 JS 进行处理,就会产生令人费解的错误,甚至导致误操作。 这是因为 Vue.js 和 React 都支持双向地把 JS 对象中的一个属性和网页上的一个输入控件绑定起来,属性被赋值时自动更新输入控件的值,输入控件被编辑时也自动更新属性的值。但如果一开始属性和输入控件的值就不相等,又没有任何一侧发生过变化,两侧就会一直不同步。这种情况要么是程序员故意为之,要么是浏览器在特定操作时(后退、前进、恢复关闭的标签页)自动恢复输入控件内容导致的。 我觉得根本在于浏览器支持很多复杂的功能,而通过写 JS 为网页引入额外的功能时,很难考虑到浏览器已有的各种功能分别会与新功能产生什么相互作用。