首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将组件tsx转换为html元素

将组件tsx转换为html元素
EN

Stack Overflow用户
提问于 2022-06-17 22:23:23
回答 1查看 340关注 0票数 0

我有一个带有类型记录的solid-js应用程序运行,我一直收到一个错误,说getElementsByNameTag不是一个函数。我的目标是能够在组件函数之外更改/获取输入元素的属性。我不知道这是不是最好的方法,有什么建议吗?

代码(App.tsx):

代码语言:javascript
运行
复制
import { Component } from 'solid-js';

const MyComponent = () => {
    return (
        <div>
            <input type="text"/>
            <p>Example Text</p>
        </div>
    );
};

const App: Component = () => {
    const component = <MyComponent/> as HTMLDivElement;
    const input = component.getElementsByNameTag("input")[0];
    
    ...

    return (
        <div>
            {component}
            ...
        </div>
    );
};

export default App;

这段代码是我要做的事情的简化版本。

错误信息:

代码语言:javascript
运行
复制
Uncaught (in promise) TypeError: component.getElementsByTagName is not a function
    at _Hot$$App (App.tsx:59:20)
    at @solid-refresh:10:42
    at untrack (dev.js:440:12)
    at Object.fn (@solid-refresh:10:28)
    at runComputation (dev.js:710:22)
    at updateComputation (dev.js:695:3)
    at runTop (dev.js:785:7)
    at runQueue (dev.js:857:42)
    at completeUpdates (dev.js:813:84)
    at runUpdates (dev.js:802:5)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-18 04:44:34

啊,我打赌我知道这是什么。热模块重新装载。为了使HMR工作,我们需要将组件包装在createMemo中,以便它们能够在更新时重新运行。在这样的情况下,相等的赋值将在dev而不是prod中给出一个函数。我们没有一个很好的方法做HMR没有包装,所以,您的选择是:

  1. 使用ref,或者赋值变量并在onMount或回调中读取变量。
  2. 关闭HMR。您可以在vite配置中通过在实体插件中设置热: false或在顶部注释/* @refresh skip */的每个文件进行全局操作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72665321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档