Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未为模块库定义变量_Javascript_Reactjs - Fatal编程技术网

Javascript 未为模块库定义变量

Javascript 未为模块库定义变量,javascript,reactjs,Javascript,Reactjs,我一直在重构我的App.js文件,并将一些函数放到一个名为utilities.js的文件中。每个函数都有一个导出,my App.js有必要的导入。但是,我得到了一些utilities.js文件中未定义“myVariable”的错误。我想这是因为我在App.js文件中的App()函数之外声明了变量,因此如果单独查看utilities.js文件,就不会声明变量。此pieceTable变量也用于App.js中的其他函数 你如何处理这种情况 例如: utilities.js文件 export const

我一直在重构我的App.js文件,并将一些函数放到一个名为utilities.js的文件中。每个函数都有一个导出,my App.js有必要的导入。但是,我得到了一些utilities.js文件中未定义“myVariable”的错误。我想这是因为我在App.js文件中的App()函数之外声明了变量,因此如果单独查看utilities.js文件,就不会声明变量。此pieceTable变量也用于App.js中的其他函数

你如何处理这种情况

例如:

utilities.js文件

export const findPieces = piece => {
pieceTable = [];
// blah blah
}
App.js文件

import {findPieces} from './utilities'

let pieceTable=[];

function App() {
const findDraught = findPieces('King')
}

对于这种类型的场景,我得到一个“编译失败”错误,说“pieceTable”没有在utilities中定义。js

我的函数不是纯函数。调用pieceTable时,我需要将它作为参数传入,这样可以避免所有这些问题。不要让我的utilities.js文件依赖于另一个文件中的全局变量。将参数传递给这些实用程序函数。

utilities.js
中没有定义它,因为没有
let
const

如果不想在utilities函数中重新定义它,那么在调用
findPieces

时需要传入
pieceTable
当你说
时,让pieceTable=[]
您明确地将
pieceTable
作为一个变量,其作用域是模块的局部变量,即而不是全局变量

如果您刚刚引用了
pieceTable
,那么您将为顶级作用域对象分配一个属性,该对象是
window
(在浏览器JavaScript上下文中)。您可以使用:
window.pieceTable
显式引用它

(仅供参考,在node.js中,它将是
global.pieceTable

Globals是passé,我不建议在您的案例中使用Globals

如果你不想全球化,但你仍然想要模块化设计 为
pieceTable
选择所属模块,并将该模块导出。然后让需要引用的所有其他模块导入它。这是利用模块机制而不是全局机制

如果你想要纯粹的设计
设计函数,使其以
pieceTable
(或将
pieceTable
作为属性的对象)的值作为参数传递给函数,而不是依赖于获取单例或全局参数。这将使您的函数更易于测试,并消除令人困惑的全局副作用。

请分享一些代码我现在已经这样做了。您在utilities中做错了。jscont pieceTable=[]在utilities.js中是正确的,但pieceTable是一个全局变量,也用于App.js文件中的其他函数。这不会有影响吗?你应该使用react Redux谢谢你的详细回答。我现在已经重构了很多代码,我发现为了保持函数的纯净,我必须传入大量的参数。再说一次,我想这是要付出的代价。