如何使用 WebView 显示 React jsx 文件
How to use WebView to show React jsx file
我看不到对 React jsx 本地文件的任何支持。我如何在 WebView 中使用它们?有人能帮我吗 。
我在这种情况下使用这样的:
<WebView
source={{
uri: isAndroid
? 'file:///android_asset/android_asset/index.jsx'
: 'index.jsx'
}}
allowUniversalAccessFromFileURLs={true}
onShouldStartLoadWithRequest={request => {
return true
}}
useWebKit={false}
/>
更新
我尝试了几个小时,但找不到将 React 文件导入 Javascript 的方法。
这是我的反应文件,如:
index.jsx
import * as React from 'react';`
export class TVChartContainer extends React.PureComponent {
componentDidMount(){ // Do something}
render(){
return (
<div
id={this.props.containerId}
className={'TVChartContainer'}
/>
);
}
}
您需要获取 HTML 字符串。在 WEB React 中,你可以通过 ReactDom 渲染 JSX,但在 ReactNative 中你不能这样做。
最简单的方法是根据您的 jsx 和数据生成 html 字符串。你可以把一切都放在那里。我给你举几个例子。
class MyInlineWeb extends Component {
componentDidMount(){ // Do something}
renderHtmlAndroid = (data) => {
return `<div>
<style>
.block {}
</style>
<div class="block">${data}<div>
<div>`
}
renderHtmliOs = (data) => {
return `<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<meta charset="UTF-8" />
</head>
<body>
<div id="app">${data}</div>
</body>
</html>`
}
render() {
return (
<WebView
originWhitelist={['*']}
source={{html: isAndroid ? this.renderHtmlAndroid([]) : this.renderHtmliOs([])}}
/>
);
}
}
我看不到对 React jsx 本地文件的任何支持。我如何在 WebView 中使用它们?有人能帮我吗 。
我在这种情况下使用这样的:
<WebView
source={{
uri: isAndroid
? 'file:///android_asset/android_asset/index.jsx'
: 'index.jsx'
}}
allowUniversalAccessFromFileURLs={true}
onShouldStartLoadWithRequest={request => {
return true
}}
useWebKit={false}
/>
更新
我尝试了几个小时,但找不到将 React 文件导入 Javascript 的方法。 这是我的反应文件,如: index.jsx
import * as React from 'react';`
export class TVChartContainer extends React.PureComponent {
componentDidMount(){ // Do something}
render(){
return (
<div
id={this.props.containerId}
className={'TVChartContainer'}
/>
);
}
}
您需要获取 HTML 字符串。在 WEB React 中,你可以通过 ReactDom 渲染 JSX,但在 ReactNative 中你不能这样做。 最简单的方法是根据您的 jsx 和数据生成 html 字符串。你可以把一切都放在那里。我给你举几个例子。
class MyInlineWeb extends Component {
componentDidMount(){ // Do something}
renderHtmlAndroid = (data) => {
return `<div>
<style>
.block {}
</style>
<div class="block">${data}<div>
<div>`
}
renderHtmliOs = (data) => {
return `<!DOCTYPE html>
<html>
<head>
<title>Title</title>
<meta charset="UTF-8" />
</head>
<body>
<div id="app">${data}</div>
</body>
</html>`
}
render() {
return (
<WebView
originWhitelist={['*']}
source={{html: isAndroid ? this.renderHtmlAndroid([]) : this.renderHtmliOs([])}}
/>
);
}
}