我正在try 让一些react 代码工作.我需要与react.development.js一起工作,而不是在服务器端做出react .我正在try 解决一个不同的问题,我想使用useState来解决这个问题,但这失败了.

我页面的开头是:

  <head>
    <script src="https://unpkg.com/react@18/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js" crossorigin></script>
    <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

React的大部分功能都能正常工作.但是当我try 使用useState时,例如:

        const ReminderSet = () => {
            console.log( "Reminderset Rendering");
            const [reminders, setReminders] = useState(defaultReminder);

我在控制台中收到错误,例如在Firefox中:

Uncaught ReferenceError: useState is not defined

推荐答案

解释

useState不是全局的,它是A)React对象的属性,B)react模块的命名导出.我建议改用模块,在这种情况下你可以做import { useState } from "react";.但如果你不想这样做,你可以用React.useStateconst { useState } = React;,然后直接用useState.

使用模块:

import React, { useState } from "react";

const Example = () => {
    const [counter, setCounter] = useState(0);
    const increment = () => setCounter((c) => c + 1);
    return (
        <div>
            Count: {counter}{" "}
            <input type="button" value="+" onClick={increment} />
        </div>
    );
};

实时副本(使用Babel独立版,这就是脚本标签具有特殊类型的原因;不要使用Babel独立版,使用Vite、Rollup或webpack等Bundle 包[或者,也不要使用JSX]):

<div id="root"></div>

<script type="text/babel" data-presets="es2017,react,stage-3" data-type="module">
import React, { useState } from "https://esm.sh/react@18.2.0";
import ReactDOM from "https://esm.sh/react-dom@18.2.0";

const Example = () => {
    const [counter, setCounter] = useState(0);
    const increment = () => setCounter((c) => c + 1);
    return (
        <div>
            Count: {counter}{" "}
            <input type="button" value="+" onClick={increment} />
        </div>
    );
};

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<Example />);

</script>
<script src="https://unpkg.com/regenerator-runtime@0.13.2/runtime.js"></script>
<script src="https://unpkg.com/@babel/standalone@7.10.3/babel.min.js"></script>

不使用模块:

const { useState } = React;

const Example = () => {
    const [counter, setCounter] = useState(0);
    const increment = () => setCounter((c) => c + 1);
    return (
        <div>
            Count: {counter}{" "}
            <input type="button" value="+" onClick={increment} />
        </div>
    );
};

现场示例:

const { useState } = React;

const Example = () => {
    const [counter, setCounter] = useState(0);
    const increment = () => setCounter((c) => c + 1);
    return (
        <div>
            Count: {counter}{" "}
            <input type="button" value="+" onClick={increment} />
        </div>
    );
};

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<Example />);
<div id="root"></div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/18.1.0/umd/react.development.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.1.0/umd/react-dom.development.js"></script>

Javascript相关问答推荐

是什么原因导致此Angular 16电影应用程序中因类型错误而不存在属性?

有什么(最佳)方法可以从模块中获取脚本模块的多姆元素吗?

将json数组项转换为js中的扁平

有条件的悲剧

如何最好地从TypScript中的enum获取值

从PWA中的内部存储读取文件

被CSS优先级所迷惑

Snowflake JavaScript存储过程返回成功,尽管预期失败

如何使覆盖div与可水平滚动的父div相关?

用于编辑CSS样式的Java脚本

在浏览器中触发插入事件时检索编码值的能力

在css中放置所需 colored颜色 以填充图像的透明区域

为什么这个.add.group({})在教程中运行得很好,但在我的游戏中就不行了?

使用Document.Evaluate() Select 一个包含撇号的HTML元素

是否可以将Select()和Sample()与Mongoose结合使用?

固定动态、self 调整的优先级队列

如何在Highlihte.js代码区旁边添加行号?

使用Library chart.js在一个带有两个y轴的图表中绘制两个数据集

将匿名函数附加到链接的onClick属性

JS/css:将数字输入的S函数和可调整大小的元素S函数绑定在一起