我在React中使用了custom element。我希望能够从React更改元素的属性。我还希望能够从元素本身内部更改相同的属性。不幸的是,当元素改变它自己的属性时,这会导致一些奇怪的副作用,我认为这些副作用与React的虚拟DOM没有意识到属性已经改变有关。
为了说明,假设我们有一个React渲染函数,它返回以下内容:
<my-component foo="bar"/>
my-component
内部有逻辑,当点击该元素时,会将foo
的值从bar
更改为unicorn
。到目前为止,一切都按预期工作。问题是在下一个渲染周期中,foo
未设置回bar
。我希望将 foo
设置回bar
。
我的猜测是,React的虚拟DOM有bar
作为缓存值(它没有意识到它已更改为unicorn
),因此不会尝试将其设置回bar
。
foo
的值会在下一个渲染周期中重新设置为bar
?答案 0 :(得分:1)
你对虚拟DOM是正确的。为了使其行为符合您的需要,自定义元素需要以支持它的方式编写。
将此视为等同于controlling an <input>
,您可以将处理程序绑定到输入react-native run-ios
,并调用onChange
来阻止对vlaue的任何更改,或者将新值传递回event.preventDefault()
以更新虚拟DOM。
因此,要使其工作,自定义元素需要支持类似的事件处理程序。