javascript - 在 React 中访问 HTMLElement Setter,并作为 customElement 加载?
问题描述
作为参考,我正在尝试为 React 中的 Home Assistant 创建一个自定义面板:https ://developers.home-assistant.io/docs/frontend/custom-ui/creating-custom-panels/
访问 HTMLElement Setter
有没有办法在 React 本身中访问 HTML Setter?目前,我将数据存储在 setter 中,然后将其传递给 React Element。但问题是每次调用 Setter 时,它都会重新渲染我的整个 React 应用程序。不理想。
这是它目前的做法:
import React from 'react'
import ReactDOM from 'react-dom'
// Small helper function to generate custom elements that will render the passed
// in React component and forwards the Home Assistant panel properties.
export default (ReactPanel) =>
class extends HTMLElement {
constructor() {
super()
this._renderScheduled = null
// Initialize properties as `null` and create setters that triggers a render
const props = {}
;['hass', 'showMenu', 'narrow', 'panel'].forEach((prop) => {
const key = `_${prop}`
this[key] = null
props[prop] = {
set(value) {
this[key] = value
this._render()
},
}
})
Object.defineProperties(this, props)
}
disconnectedCallback() {
ReactDOM.unmountComponentAtNode(this)
}
_render() {
if (this._renderScheduled !== null) return
this._renderScheduled = Promise.resolve().then(() => {
this._renderScheduled = null
ReactDOM.render(
React.createElement(ReactPanel, {
hass: this._hass,
showMenu: this._showMenu,
narrow: this._narrow,
panel: this._panel,
}),
this
)
})
}
}
有谁知道我可以从我的 React 应用程序本身中从这些 Setter 获取数据的方法吗?这样我就可以在内部处理它们,而不会像上面的代码那样导致整个应用程序重新渲染
将 React App 传递给 customElement.define()
如果我实现了上述目标,我该如何将这个应用程序加载到 customElement.define() 中?
解决方案
推荐阅读
- java - 使用自定义异常并在最终常量中定义它
- python - 我正在尝试编写一个程序,询问用户一个字符串并测试它是否是一个关键字。
- python - 如何在可执行文件上运行脚本?
- r - “率”列的长度必须为 1(汇总值),而不是 22906
- python - tkinter 按钮按下重复
- python - 从其他计算机控制树莓派 python 项目
- javascript - Apache Cordova:从 Web 视图中引发事件
- angular - 在 Firestore 中创建结构并获取数据
- selenium-webdriver - 无法单击硒网络驱动程序中的第二个按钮
- java - 如何通过 Arraylist 打印完整的输入列表?