Javascript 再次将字符串React组件转换为jsx
我有一个问题,因为从NodeJS读取javascript文件并发送到客户机,在这里我将所有文件作为字符串(这很明显),这是我的问题。是否有任何解决方案可以将字符串组件再次转换为jsx?这不是唯一的html标记,因此Javascript 再次将字符串React组件转换为jsx,javascript,node.js,reactjs,Javascript,Node.js,Reactjs,我有一个问题,因为从NodeJS读取javascript文件并发送到客户机,在这里我将所有文件作为字符串(这很明显),这是我的问题。是否有任何解决方案可以将字符串组件再次转换为jsx?这不是唯一的html标记,因此危险的html或类似方法不起作用 我的字符串组件看起来像典型的React组件,类似于: import React from 'react'; import { Row } from 'react-bootstrap; import Home from './Home' ...
危险的html
或类似方法不起作用
我的字符串组件看起来像典型的React组件,类似于:
import React from 'react';
import { Row } from 'react-bootstrap;
import Home from './Home'
......
const Index = () => {
const renderHelloWorld = <h1>Hello World</h1>
return (
<div>{renderHelloWorld}</div>
)
}
export default Index;
从“React”导入React;
从'react bootstrap'导入{Row};
从“./主页”导入主页
......
常数索引=()=>{
const renderHelloWorld=你好世界
返回(
{renderHelloWorld}
)
}
出口违约指数;
因此,这是我正在努力解决的字符串,如何将其转换为jsx(可能这是不可能的),我应该使用服务器端呈现和React方法,如
ReactDOMServer
?尝试这个库https://www.npmjs.com/package/react-html-parser
import Parser from 'html-react-parser';
const renderHelloWorld = <h1>Hello World</h1>
<div>{Parser(renderHelloWorld)}</div>
用于将HTML字符串转换为React组件的实用程序。避免使用危险的HTML,并将标准HTML元素、属性和内联样式转换为等效的React。尝试此库
https://www.npmjs.com/package/react-html-parser
import Parser from 'html-react-parser';
const renderHelloWorld = <h1>Hello World</h1>
<div>{Parser(renderHelloWorld)}</div>
用于将HTML字符串转换为React组件的实用程序。避免使用危险的HTML,并将标准HTML元素、属性和内联样式转换为它们的React等价物。您可以使用简单的旧JavaScript来完成这项工作
document.querySelector('#elementToBeReplace').innerHTML = renderHelloWorld;
react.js的另一个选项是使用危险的HTML
<div dangerouslySetInnerHTML={{ __html: renderHelloWorld }} />
您可以使用简单的旧JavaScript来完成这项任务
document.querySelector('#elementToBeReplace').innerHTML = renderHelloWorld;
react.js的另一个选项是使用危险的HTML
<div dangerouslySetInnerHTML={{ __html: renderHelloWorld }} />
所以,我的问题的解决方案非常流行和简单(在项目早期阶段),要理解问题并解决它,我们需要回到应用程序的服务器部分。对于
React
应用程序,如果我们希望从服务器渲染jsx文件,我们必须使用服务器端渲染,上述问题将消失。也许我会逐步演示如何在te服务器中启用渲染反应组件
npm install @babel/core @babel/node @babel/preset-env @babel/preset-react --save-dev
有很多方法可以配置Babel,为此我使用了最近的package.json
{
......,
/*This have to be in the top level in package.json*/
"babel":{
"presets":[
"@babel/preset-env",
"@babel/preset-react"
]
}
}
...//correct React component
const[state, setState] = useState({Component: ''});
fetch('/exampleRoute')
.then(response => response.json())
.then(data => setState(state => ({...state, Component: data.data));
....
return(
<div dangerouslySetInnerHTML={{ __html: state.Component }}></div>
)
为此,我们必须在服务器端安装react和react dom包
npm install react react-dom
例如,在服务器js或route.js文件中:
.... //necesarry imported modules
import ReactDOMServer from 'react-dom/server'
import Index from './Index';
router.get('/exampleRoute', (req, res) => {
.... //your route business logic
res.send(ReactDOMServer.renderToString(<Index/>))
})
//必要的进口模块
从“react dom/server”导入ReactDOMServer
从“./Index”导入索引;
router.get('/exampleRoute',(req,res)=>{
..//您的路线业务逻辑
res.send(ReactDOMServer.renderToString())
})
...//correct React component
const[state, setState] = useState({Component: ''});
fetch('/exampleRoute')
.then(response => response.json())
.then(data => setState(state => ({...state, Component: data.data));
....
return(
<div dangerouslySetInnerHTML={{ __html: state.Component }}></div>
)
../correct React组件
const[state,setState]=useState({Component:'});
获取(“/exampleRoute”)
.then(response=>response.json())
.then(data=>setState(state=>({…state,Component:data.data));
....
返回(
)
这只是一个简单的示例,如果需要,您可以从后端渲染React组件。这不是应用程序中复杂服务器端渲染的指南,这是一件更复杂的事情,但不是一件困难的事情。因此,我的问题的解决方案非常流行且简单(在项目早期阶段),要理解问题并解决它,我们需要返回到应用程序的服务器部分。对于
React
应用程序,如果我们想从服务器渲染jsx文件,我们必须使用服务器端渲染,上述问题将消失。也许我将逐步演示如何在te服务器中启用渲染React组件
npm install @babel/core @babel/node @babel/preset-env @babel/preset-react --save-dev
有很多方法可以配置Babel,为此我使用了最近的package.json
{
......,
/*This have to be in the top level in package.json*/
"babel":{
"presets":[
"@babel/preset-env",
"@babel/preset-react"
]
}
}
...//correct React component
const[state, setState] = useState({Component: ''});
fetch('/exampleRoute')
.then(response => response.json())
.then(data => setState(state => ({...state, Component: data.data));
....
return(
<div dangerouslySetInnerHTML={{ __html: state.Component }}></div>
)
为此,我们必须在服务器端安装react和react dom包
npm install react react-dom
例如,在服务器js或route.js文件中:
.... //necesarry imported modules
import ReactDOMServer from 'react-dom/server'
import Index from './Index';
router.get('/exampleRoute', (req, res) => {
.... //your route business logic
res.send(ReactDOMServer.renderToString(<Index/>))
})
…//necesarry导入的模块
从“react dom/server”导入ReactDOMServer
从“./Index”导入索引;
router.get('/exampleRoute',(req,res)=>{
..//您的路线业务逻辑
res.send(ReactDOMServer.renderToString())
})
...//correct React component
const[state, setState] = useState({Component: ''});
fetch('/exampleRoute')
.then(response => response.json())
.then(data => setState(state => ({...state, Component: data.data));
....
return(
<div dangerouslySetInnerHTML={{ __html: state.Component }}></div>
)
../correct React组件
const[state,setState]=useState({Component:'});
获取(“/exampleRoute”)
.then(response=>response.json())
.then(data=>setState(state=>({…state,Component:data.data));
....
返回(
)
这只是一个简单的例子,如果有必要,您可以从后端渲染React组件。这不是应用程序中复杂服务器端渲染的指南,这是一件更复杂的事情,但不是一件困难的事情。我可以问一下,为什么您需要将
.js
文件作为纯文本文件传递?因为用户可以上载带有代码sn的文件ippet到服务器,我希望在客户端呈现此文件。这仅适用于开发模式,因为我使用create react app并禁用在/src Foldermy之外导入文件。我问您为什么需要将.js
文件作为纯文本文件传递?因为用户可以将带有代码段的文件上载到服务器,我希望在客户端呈现此文件这仅适用于开发模式,因为我使用CreateReact应用程序并禁用/src文件夹外的导入文件