Javascript 全局导入的变量未定义
我的FinalVariables.js中有三个变量,如下所示:Javascript 全局导入的变量未定义,javascript,reactjs,Javascript,Reactjs,我的FinalVariables.js中有三个变量,如下所示: var finalTaskName = 'abc' var finalQuantityTaskExecuted = 0 var finalQuantityTaskCompletion = 100 export {finalTaskName, finalQuantityTaskExecuted, finalQuantityTaskCompletion} import * as finalVariables from './Fina
var finalTaskName = 'abc'
var finalQuantityTaskExecuted = 0
var finalQuantityTaskCompletion = 100
export {finalTaskName, finalQuantityTaskExecuted, finalQuantityTaskCompletion}
import * as finalVariables from './FinalVariables'
在另一个文件中,我使用以下行导入它们:
import {finalTaskName,finalQuantityTaskExecuted,finalQuantityTaskCompletion} from './FinalVariables'
但是,当我试图在另一个文件中使用上述三个变量中的任何一个时,它们总是未定义的。
这有什么原因吗
我对Javascript和React都是新手,任何帮助都将不胜感激!谢谢大家!
-------------------------------------------------------------------------------------------更新-------------------------------------------------------------
我导入的变量如下:
var finalTaskName = 'abc'
var finalQuantityTaskExecuted = 0
var finalQuantityTaskCompletion = 100
export {finalTaskName, finalQuantityTaskExecuted, finalQuantityTaskCompletion}
import * as finalVariables from './FinalVariables'
当我做一个
console.log(finalVariables.finalTaskName)
我可以打印正确的值,但当我尝试为其赋值时:
finalVariables.finalTaskName = this.props.item[0].particulars
我得到以下错误:
无法设置#的finalTaskName属性,该属性只有一个getter
===========================================更新======================================
我现在能够正确地更新这些值,但是在我导入这些值的主类TasksInsert.jsx中,我在render函数中有这个
<p>{finalVariables.finalTaskName}</p>
<p>{finalVariables.finalQuantityTaskExecuted}</p>
<p>{finalVariables.finalQuantityTaskCompletion}</p>
---------------------------------------------------------------------更新--------------------------------------
我对一个名为BOQSuggestions的全局数组采用了类似的方法,我将数据推送到该数组中,它起了作用,即对数据的更改在全局范围内得到了反映
另外,这是我唯一需要共享数据的地方,这就是我不想使用Redux的原因
有人能推荐代码来解决这个问题吗?我仍然停留在这里,不熟悉Javascript。模块导出是设计为只读的。如果需要某种全局可变状态,应通过从模块导出可变对象来实现:
// final-vars.js
export default {
finalTaskName: 'abc',
finalQuantityTaskExecuted: 0,
finalQuantityTaskCompletion: 100
};
您可以在FinalVariables.js
文件中创建函数,如下所示:
const setFinalTaskName=(value)=>finalTaskName=value
将其从组件中导出并调用为:
setFinalTaskName(--新值--)
导出默认值?如果我这样做,我会收到消息“尝试导入错误:finalQuantityTaskCompletion”不是从“/FinalVariables”导出的。您可以共享更多代码,只是为了检查一下。您可以尝试从“/FinalVariables”导入一些变量
和console.log(someVars)代码>要查看导入的内容,为什么要尝试为导入设置值?谢谢@Jacob。我现在能够正确地更新这些值,但是在我导入这些值的主类TasksInsert.jsx中,我在渲染函数中有它,{finalVariables.finalquantitytaskname}{finalVariables.finalQuantityTaskExecuted}{finalVariables.finalQuantityTaskCompletion}为什么这些值没有根据最近的变化反映出来?我的状态构造函数如下所示:this.setState({finalVariables,})您的期望是,如果其他内容更改这些变量,您的UI将响应这些更改?JavaScript并不是这样工作的。我不认为易变的全局变量是你来这里的方式。如果您想让UI响应变量更改,那么您需要一些可以订阅的内容。对于可以响应的共享状态,这就是redux
和context等解决方案的作用。我对名为BOQSuggestions的全局数组采用了类似的方法,我将数据推送到了该数组中,结果成功了,也就是说,它的变化在全球范围内得到了反映。另外,这是我唯一需要共享数据的地方,这就是我不想使用Redux的原因。有人能推荐代码来解决这个问题吗?我仍然停留在这里,对Javascript还不熟悉。