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

Node.js 如何使用next.js将动态html元素注入页面?,node.js,reactjs,next.js,Node.js,Reactjs,Next.js,如何使用next.js将动态注入html元素添加到页面?这些元素的类型未知,如输入、复选框、img等,。。。。此元素由返回json类型的api指定,如下所示: [{ "id":"rooms", "title":"Rooms", "order":1, "type":"string", "widget":"select", "data":[{ "Id":18, "ParentId":null,

如何使用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=异步函数{req,query}{ const res=等待获取“url api” var elements=await res.json var测试==> {……将json转换为html元素……} 返回{ 测验 } } 函数Indexprops{ 回来 {props.test} } 结果为空,表示结果无效


问题是,我做对了吗?有更好的方法吗?

在getInitialprops中将道具从服务器传输到客户端的过程中,JSON被序列化,因此函数并没有真正序列化。看

最好的方法是将测试数据转换为HTML数据字符串,并使用危险的HTML注入它。例如:

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


您可以在这里了解更多信息:

在getInitialprops中将道具从服务器传输到客户端的过程中,JSON被序列化,因此函数并不是真正序列化的。看

最好的方法是将测试数据转换为HTML数据字符串,并使用危险的HTML注入它。例如:

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


您可以在此处阅读更多信息:

谢谢,它非常有用。但是,这是一种常用的注射方法吗?我不会说这是标准的。真的没有一个转到标准。如果您认为json数据非常有用,还可以返回json数据并将其解析为真正的JSX。但是,这是一种常用的注射方法吗?我不会说这是标准的。真的没有一个转到标准。如果需要,还可以返回json数据并将其解析为真正的JSX