小编Geo*_*mar的帖子

将 ES 模块与 babel-standalone 一起使用

引用 babel 文档https://babeljs.io/docs/en/babel-standalone#usage

“如果您想使用浏览器对 ES 模块的本机支持,通常需要在脚本标记上设置 type="module" 属性。对于 @babel/standalone,请设置 data-type="module" 属性”

但出于某种原因,当包含我的主 index.js 文件(使用 import 导入其他 js / jsx 文件)时,babel 似乎正在将我的 import 语句转换为 require 语句,因为我收到了 ReferenceError: require is not Defined。

我发现解决这个问题的唯一方法是使用transform-modules-umd插件并将我的所有js文件作为脚本包含在内。不确定这是否是 data-type="module" 不起作用的错误,或者我是否遗漏了某些内容。

这些是我在index.html 中的脚本标签

<script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>

<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

<script src="index.js" type="text/babel" data-type="module"></script>
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

javascript reactjs umd babeljs es6-modules

6
推荐指数
2
解决办法
4373
查看次数

设置数组等于另一个或使用三个点之间的差异

在 React 中使用钩子并使用数组作为状态时,我发现使用 setter 函数仅更新该状态数组的一个元素并没有重新渲染组件。我是这样做的:

const [listCollapsed, setListCollapse] = useState(Array(props.list.length).fill(false));

const expandCollapse = (ind) => {
    let newListCollapsed = listCollapsed;
    newListCollapsed[ind] = !listCollapsed[ind];
    setListCollapse(newListCollapsed);

}
Run Code Online (Sandbox Code Playgroud)

其中 expandCollapse 是按下列表元素时调用的函数。我发现将函数的第一行更改为:

let newListCollapsed = [...listCollapsed];
Run Code Online (Sandbox Code Playgroud)

使它工作。我想知道对此的解释是什么。

javascript reactjs spread-syntax react-hooks

2
推荐指数
1
解决办法
230
查看次数