全局导入的变量未定义

时间:2019-10-15 20:39:22

标签: javascript reactjs

我的 FinalVariables.js 中有三个变量,如下所示:

var finalTaskName = 'abc'
var finalQuantityTaskExecuted = 0
var finalQuantityTaskCompletion = 100

export {finalTaskName, finalQuantityTaskExecuted, finalQuantityTaskCompletion}

在另一个文件中,我使用以下行导入它们:

import {finalTaskName,finalQuantityTaskExecuted,finalQuantityTaskCompletion} from './FinalVariables'

但是,当我尝试在另一个文件中使用以上三个变量中的任何一个时,它们始终为undefined。 是否有一个原因?

我是Java和React的新手,我们将不胜感激!谢谢!

-------------------------------------------------- - - - - - - - - - - - - - - - - - - - - - - 更新 - - - -------------------------------------------------- ------

我按如下所示导入了变量:

import * as finalVariables from './FinalVariables' 

当我做一个 console.log(finalVariables.finalTaskName)

我能够打印正确的值,但是当我尝试为其分配值时:

finalVariables.finalTaskName = this.props.item[0].particulars 

我遇到以下错误:

  

不能设置#属性只有一个吸气剂的finalTask​​Name

============================更新================= =====================

我现在能够正确更新值,但是在要导入这些值的主类TasksInsert.jsx中,我在render函数中有此值

<p>{finalVariables.finalTaskName}</p> 
<p>{finalVariables.finalQuantityTaskExecuted}</p> 
<p>{finalVariables.finalQuantityTaskCompletion}</p> 

为什么这些值不能根据最近的变化反映出来?我的状态构造函数如下所示:

this.setState({ finalVariables })

-------------------------------------------------- - - - - - - - - - - - 更新 - - - - - - - - - - - - - - -----------

我对名为BOQSuggestions的全局数组采用了类似的方法,我向其推送数据并对其起作用,即对它的更改已在全球范围内反映出来。

另外,这是我唯一需要共享数据的地方,这就是为什么我不想使用Redux。

有人可以建议代码来解决此问题吗?我仍然停留在这里,对Java语言还是陌生的。

2 个答案:

答案 0 :(得分:3)

模块导出在设计上是只读的。如果需要某种全局可变状态,则应通过从模块导出可变对象来实现:

// final-vars.js

export default {
  finalTaskName: 'abc', 
  finalQuantityTaskExecuted: 0, 
  finalQuantityTaskCompletion: 100
};
// other.js

import finalVariables from './final-vars';

// ...

finalVariables.finalTaskName = this.props.item[0].particulars // Allowed

答案 1 :(得分:1)

您可以在FinalVariables.js文件中创建一个函数,如下所示:

const setFinalTaskName = (value)=>finalTaskName=value

导出并通过以下方式从您的组件中调用

setFinalTaskName(--new-value--)