如何使用 next.js 将动态 html 元素注入到页面?

2024-06-19

如何使用next.js动态注入html元素到页面?这些元素未知类型,例如(输入,复选框,img,...)。使用返回 json 类型的 api 指定此元素,如下所示:

[{
   "id":"rooms",
   "title":"Rooms",
   "order":1,
   "type":"string",
   "widget":"select",
   "data":[{
            "Id":18,
            "ParentId":null,
            "Title":"One",
            "Level":null,
            "Childrens":[]
           },
            {"Id":19,
            "ParentId":null,
            "Title":"Two",
            "Level":null,
            "Childrens":[]
           },
            {"Id":20,
            "ParentId":null,
            "Title":"Three",
            "Level":null,
            "Childrens":[]
           }]
},
{
   "id":"exchange",
   "title":"Exchange",
   "order":0,
   "type":"boolean",
   "widget":"checkbox",
   "data":[]
}]

我的尝试是:

Index.getInitialProps = async function({req, query}) {

    const res= await fetch('url api')
    var elements= await res.json() 

    var test = () => (
        <div>
            {...... convert json to html elements.......}
        </div>
    )

    return {
        test
    }
})
function Index(props) {
   return(
      <a>
        {props.test}
      </a>
   )
}

结果为空,对演示没有任何意义。

问题是,我做的事正确吗?有没有更好的办法?


发生的情况是,在将道具从服务器传输到客户端的过程中getInitialprops,JSON 是序列化的,因此函数并没有真正序列化。看https://github.com/zeit/next.js/issues/3536 https://github.com/zeit/next.js/issues/3536

最好的办法是将测试数据转换为 HTML 数据字符串并使用dangerouslySetInnerHTML。一个例子是:

class TestComponent extends React.Component {
    static async getInitialProps() {
        const text = '<div class="homepsage">This is the homepage data</div>';
        return { text };
    }

    render() {
        return (
            <div>
                <div className="text-container" dangerouslySetInnerHTML={{ __html: this.props.text }} />
                <h1>Hello world</div>
            </div>
        );
    }
}

问题是您返回的字符串必须是有效的 HTML(而不是 JSX)。所以请注意我使用了class代替className

你可以在这里读更多关于它的内容:https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml https://reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 next.js 将动态 html 元素注入到页面? 的相关文章

  • 使用 React 和 Ant Design 的浮动标签

    对于我的 React 应用程序 我正在尝试构建一个表单浮动标签使用具有不同输入类型的 Antd 模板 仅使用样式使标签浮动 到目前为止 我已经能够将标签放在输入后面 但是当我将转换 转换应用于我的CSS代码时 它似乎根本不起作用 这是我的表
  • 如何禁用和隐藏反应表的分页页脚?

    我是反应表的新手 目前 我有一个 5 行表要在反应表上渲染 并且不需要分页功能 我了解关闭分页 可以通过以下方式完成 pagination false 但是分页控件仍然显示 有办法隐藏它吗 我刚刚找到道具showPagination fal
  • React - Jest - 测试阻止默认操作

    我不知道如何测试按键事件并防止默认 测试达到了代码但是preventDefault从未被称为 Received number of calls 0 反应组件 App js const onKeyDown e gt console log T
  • 尝试附加行谷歌表格API

    我一直在尝试让追加行示例工作几个小时 但没有成功 我没有收到任何错误 但我的电子表格根本没有更新 https developers google com sheets samples writing append values https
  • 对于向 XSS 漏洞开放 JWT,我应该有多担心?

    我正在构建一个 Node js Web 应用程序 该应用程序使用用于 GUI 的 React 和由 Apollo 提供的 graphQL 用于连接到 AWS 上的 RDS MySQL 实例的后端 我正在对用户进行身份验证 然后返回 JWT
  • req.protocol 永远不会在 nginx 代理后面提供 https

    我正在尝试识别我的 Express 应用程序是否通过https协议 Using nginx处理认证和加密 在同一台机器上 并转发请求 req protocol评估为http即使 https 正在使用并且工作正常 我已经尝试了以下两种方法 单
  • 是否可以调试当前正在运行的生产节点应用程序?

    在本地我通过运行进行调试node debug并使用node inspector工具 节点检查器必须在后台运行 然后我将浏览器指向 并非所有浏览器都可以工作 Chrome 可以 http 127 0 0 1 8080 debug port 5
  • 传递额外的参数来绑定?

    我有两个类似这样的函数 primaryImageLoaded this setState primaryImageLoaded true secondaryImageLoaded this setState secondaryImageLo
  • React-Router 在路由更改时重新安装组件

    我有一个连接 到 redux 存储 的组件 我有多个路由都在渲染道具中使用此组件 每次路线改变时 整个组件似乎都被重新安装 有什么办法可以防止这种情况发生吗 我的第一个想法是 我可能每次都会重新实例化组件 因为 render prop 是一
  • 静态类属性不适用于 Babel

    我正在使用 JSDOC 及其所有支持的 npm 插件来创建漂亮的文档 当 jsdoc 运行并解析 JSX 文件时遇到困难 它总是抛出如下错误 sign SyntaxError unknown Unexpected token export
  • JS 无法查询 MySQL 数据库。错误:connection.query 不是函数

    尝试查询我的 mySQL 数据库 但我不能 因为我得到了TypeError connection query is not a function错误 有谁知道为什么吗 我不知道为什么会发生这种情况 数据库 js const fs requi
  • Express COR 策略阻止 Apollo 客户端从服务器获取数据

    我正在运行一个反应开发服务器http localhost 3000和一个快递服务器http localhost 8080并使用 Apollo 客户端来查询服务器 为了使会话数据能够从客户端传递到服务器 我添加了credentials inc
  • 如何在网页中渲染 Blender 模型?

    因此 我探索了在网络应用程序中渲染搅拌机模型的多种选项 现在我将模型导出为 gltf格式 这是我的代码 App js import React Suspense from react import App css import Model
  • 如何使用PNGJS库从rgb矩阵创建png?

    我无法从此处的文档创建 PNG 文件 编码 https github com niegowski node pngjs https github com niegowski node pngjs 该文档提供了有关操作现有 PNG 的示例 为
  • socket.io 切换命名空间

    我目前正在与 socket io 进行简单的聊天 基础知识已经可以工作 但现在我正在尝试实现 2 个不同的命名空间 我希望客户端能够通过单击按钮从一个命名空间 支持聊天 切换到另一个命名空间 朋友聊天 服务器端 default namesp
  • 在next.js中获取客户端当前的url

    因此 我正在开发一个 Nodejs 应用程序 我将在该应用程序上建立我的新网站 并且我想为客户端的用户提供一种显示不同内容的方法 根据用户按下的内容重新呈现 我的想法是 例如 首先用户会看到 请先选择一个工具 然后用户将在导航栏中选择一个工
  • 无法将环境变量传递给 docker

    我正在尝试使用环境变量运行 docker 映像 但它对我来说不起作用 无论是使用 env list 文件还是通过命令行 docker run p 49160 8080 d appname e FOO foo 来自守护程序的错误响应 OCI
  • TypeError:使用react-create-app jest和enzyme进行测试时,dispatch不是一个函数

    我正在尝试对使用react create app 创建的新项目进行测试 现在似乎正在使用 React 16 和 Jest 3 据说有一些重大更改 或者可能是 enzime 我收到类似于这篇文章的错误TypeError 当我尝试使用 JEST
  • 如何仅在客户端渲染 NextJS 13 中的组件

    我目前正在开发一个项目 该项目要求我的组件对客户端频繁变化的条件做出反应 但据我所知 NextJS 13 似乎强制服务器端渲染 我尝试使用动态加载import dynamic from next dynamic and const Comp
  • nodejs module.js:340 错误: 找不到模块

    我将nodejs安装在C Program Files x86 nodejs 然后我创建了一个 js 文件并将其保存在桌面中 以便在控制台中输出 hello world console log hello world 当我尝试从命令提示符运行

随机推荐

  • BDD/TDD:依赖可以是一种行为吗?

    我被告知不要使用实施细节 依赖关系看起来像是一个实现细节 但我也可以将其表述为一种行为 示例 LinkList 依赖于存储引擎来存储其链接 例如 LinkStorageInterface 构造函数需要传递一个已实现的 LinkStorage
  • “ghs.google.com”域的机制是什么?

    如果我想给我的应用程序绑定一个域名GAE Google App Engine 我应该添加一条 CNAME 记录ghs google com 我想了解这个域名是如何运作的 例如 我有这样的 CNAME blog goace com ghs g
  • * foreach 里面的 foreach codeigniter 2?

    在 codeigniter 2 1 中 我尝试按类别显示频道 因此 如果我有一个名为 电影 的类别 我应该会看到电影中的频道列表 我尝试使用嵌套的 foreach 循环来完成此任务 但似乎无法使其工作 我的表结构是这样的 但更复杂 我的型号
  • strings.xml 中的 Android 变量

    我在某处读到如何在 XML 文档中使用变量 他们说这很简单 我想也是如此 我在 Android strings xml 文件中成功地使用了它 我一整天都这样使用它 直到突然 android 停止解析它并停止将它视为变量 我这样使用它
  • 一对一映射不适用于二级缓存

    我已经声明了 Hibernate 3 的以下映射 使用 FluentNHibernate public class ActivityMap ClassMap
  • 用渐变画线

    我在不同的位置画了多条线 例如 canvas drawLine startXLine1 stopXLine1 startYLine1 stopYLine1 paint canvas drawLine startXLine2 stopXLin
  • 为什么 fopen("any_path_name",'r') 不给出 NULL 作为返回值?

    在调试一些代码时 我得到如下内容 include
  • HTML表可选择行Javascript包[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Is there a Javascript package out there that makes table rows selecta
  • 在横向模式下向 UIScrollView 添加子视图

    我有一个以横向模式启动的视图控制器 其中有一个 UIScrollView 我尝试创建子视图并将它们添加到 UIScrollView 但视图的框架大小都是纵向大小 这是我的代码 void viewDidLoad super viewDidLo
  • Chrome 扩展:插入固定 div 作为 UI

    我想使用 chrome 扩展将 div 插入固定位置 它将覆盖您当前正在查看的页面 我担心的是 我希望它可以在任何页面上工作而不改变它 除了插入我的固定 div 之外 但我不知道我这样做的方式是否可行 目前 该按钮不会显示 并且我在让 di
  • Emoji 字符无法编码为 JSON

    我有一个UITextView我称之为messageField 其中的数据messageField is POST ed 以 JSON 格式发送到服务器 当用户输入表情符号字符时 我无法将数据编码为JSON 我认为 Emoji 使用 Unic
  • 顺序没有属性“validation_data”

    我从下面的链接下载并运行该文件https github com keunwoochoi keras callbacks example https github com keunwoochoi keras callbacks example
  • 确定虚拟内存的页表大小

    考虑一个具有 38 位虚拟字节地址 1KB 页和 512 MB 物理内存的虚拟内存系统 假设有效位 保护位 脏位和使用位总共占 4 位 并且所有虚拟页都在使用中 则本机上每个进程的页表总大小是多少 假设磁盘地址未存储在页表中 好吧 如果问题
  • 在 Python 3.8.0 中使用 pip 安装 numpy 时如何修复“错误:命令错误,退出状态 1”

    将Python升级到3 8 0后 我在使用pip安装与numpy相关的包时遇到问题 包括numpy matplotlib和sklearn 错误信息如下 我应该怎么做才能解决这个问题 C WINDOWS System32 gt pip ins
  • 全面的 html5 音频 API

    对于我的一生 我找不到所有 html5 的完整列表
  • 如何将两个图像放置在一个div的对角

    如你所见 我不是 CSS 专家 我需要一些帮助来了解如何使用两个图像制作这个 div 如下图所示 托马斯是对的 但还有更好的解决方案 div img class align left src alt description of your
  • *.hlsl 文件有什么作用,该文件和 *.fx 文件之间有什么关系?

    我正在阅读 DirectX 项目的示例 我看到 fx and hlsl files I know fx是DirectX读取的效果文件 但是它的用途是什么hlsl文件 这些文件有用吗 历史上fx包含使用效果系统语法的着色器 technique
  • 如何使用单独的线程部分重绘自定义 SurfaceView 而不会丢失以前的编辑?

    我目前在按照自定义绘图时遇到问题SurfaceView来自不在我的主 UI 上的线程 这SurfaceView占据整个屏幕 Galaxy S3 全屏 并且必须从多个来源进行更新 问题是习惯SurfaceView不会保存 UI 更新之间的更改
  • 特定时间的 iPhone 本地通知

    我想每周晚上 10 点 无论哪个国家 地区 发出通知 我需要使用时区吗 目前 我使用下面的代码每周触发通知 但如何在晚上 10 点准确触发通知 NSDate date NSDate date NSDate myNewDate date da
  • 如何使用 next.js 将动态 html 元素注入到页面?

    如何使用next js动态注入html元素到页面 这些元素未知类型 例如 输入 复选框 img 使用返回 json 类型的 api 指定此元素 如下所示 id rooms title Rooms order 1 type string wi