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