我一直在网上搜索,包括堆栈溢出,如何在JS React中声明全局变量。
我有一个名为name的声明变量,我想在我的代码的两个不同部分使用这个变量。但是我在代码的某些部分返回一个未定义的变量,即使我把它留在所有函数之外,因为通常是全局变量。
应该有一种在React中声明全局变量的特殊方法吗?
我的Js React Code - 它是我的代码的一个非常简单的样本,可以提供洞察力
/* I need this variable to be global so that
* I can you it inside "DataAreaOne" and "DataAreaTwo"
*/
var name = 'empty';
/*************************FIRST PART***************/
var DataAreaOne = _react2.default.createClass({
displayName: 'DataAreaOne',
render: function render() {
if(name != "something"){
// change name to something else
name = "something else";
return _react2.default.createElement(
'div',
{ className: 'container-for-stats' },
_react2.default.createElement(
'div',
{ className: 'name-for-stats' },
'some data goes here'
)
);
}
}
});
/*************************SECOND PART***************/
var DataAreaTwo = _react2.default.createClass({
displayName: 'DataAreaTwo',
render: function render() {
if(name == "something else"){
return _react2.default.createElement(
'div',
{ className: 'container-for-stats' },
_react2.default.createElement(
'div',
{ className: 'name-for-stats' },
'some data goes here'
)
);
}else{
alert('nothing found');
}
}
});
看看反应背景:
https://reactjs.org/docs/context.html
简单的例子:
const ThemeContext = React.createContext('name');
如果您正在使用react 16.2和更低版本,请使用此遗留反应上下文:
https://reactjs.org/docs/legacy-context.html
您可以在任何父组件中声明全局上下文变量,并且可以通过this.context.name
在组件树中访问此变量。你只需要指定childContextTypes
和getChildContext
或者如果你想要“丑陋”的方式,请这样做:在vars.js内
declare var Name = 'empty';
export default window.Name;
然后在包含“DataAreaOne”和“DataAreaTwo”的文件中导入“./vars”
import Name from './vars';
然后在课堂上
name = Name;
并像这样使用它
...
if(this.name != "something"){
...
React Native中的全局范围是可变全局的。例如:作为global.foo = foo,那么你可以将global.foo作为全局变量使用。
全局范围可用于存储全局配置或类似事物。在不同视图之间共享变量,作为您的描述,您可以选择许多其他解决方案(使用redux,flux或将它们存储在更高的组件中),全局范围不是一个好的选择。
定义全局变量的一个好习惯是使用js文件。例如global.js
global.foo = foo;
global.bar = bar;
然后,确保在项目初始化时执行它。例如,在index.js中导入文件:
import './global.js'
// other code
另一种简单的方法就是在构造函数下声明它。
constructor(props) {
super(props);
this.myData = 0;
}
//you can use myData through the component
//for ex : this.myData += 1