gpt4 book ai didi

javascript - 如何在调用渲染组件之前在浏览器 JSX 编译器中等待

转载 作者:搜寻专家 更新时间:2023-11-01 04:16:27 24 4
gpt4 key购买 nike

(使用浏览器中的 JSX 转换器)当从普通 javascript 调用一个 React 组件时,我得到一个 Uncaught ReferenceError

我尝试从我的 javascript 应用程序调用 React.js (0.12.2) 组件。我有一个 JQuery document.ready 处理程序来执行此操作。

看起来,浏览器中的 JSX 编译器需要一些时间才能准备好使用 React 的组件。

在这种情况下,Document.ready 可能不是一个选项。

请看下面的例子:

index.html:

<!DOCTYPE html>
<html>
<head lang="en">
<script src="jquery-2.1.3.min.js"></script>

<script src="react-0.12.2/JSXTransformer.js"></script>
<script src="react-0.12.2/react.js"></script>

<script type="text/jsx" src="reactComponent.js"/>

<script src="app.js"/>
</head>
<body>
<div id="target"></div>
</body>

应用程序.js:

$(function () {
console.log("app.js: " + typeof MyComponent);
init();
});

组件.js:

var MyComponent = React.createClass({
render: function () {
return (<div>works</div>)
}
});

function init() {
console.log("init: " + typeof MyComponent);
React.renderComponent(<MyComponent/>, document.getElementById("target"));
}

在日志中的浏览器输出中运行:

app.js: undefined
app.js: Uncaught ReferenceError: init is not defined

但是当我通过 jsx 转换器加载 app.js 时,通过在脚本标记中添加 type="text/jsx",它起作用了:

app.js: function
reactComponent.js: init: function

有没有其他方法可以等待 JSX 转换器完成,而不是加载类型为 text/jsx 的所有 js 文件?我是对的吗,这真的是特定于浏览器中的 JSX 转换器

最佳答案

如果可以的话,我建议您切换到 JSX 预编译器工作流程(例如,如果您使用的是 NodeJS,则使用 gulpgrunt)。这样,您就不必担心这个排序问题。

在您可以切换之前,我建议您将应用程序初始化放在最后加载的 text/jsx 脚本文件中。这样,它将始终在 DOM 完全加载并准备好使用后执行。如果进行此更改,则不需要依赖 jQuery 事件。

您甚至可以将最后一个文件切换为仅作为 test/jsx 处理,即使它当前可能不包含任何 JSX 功能:

<script src="app.js" type="text/jsx"></script>

(顺便说一下,您不应该为 script 使用自闭合标签,请参阅 here)。

关于javascript - 如何在调用渲染组件之前在浏览器 JSX 编译器中等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com