【问题标题】:How to declare global variables in React JS如何在 React JS 中声明全局变量
【发布时间】:2018-12-16 20:01:34
【问题描述】:

我一直在网上搜索,包括堆栈溢出,如何在JS React中声明全局变量。

我有一个名为 name 的已声明变量,我想在我的代码的两个不同部分中使用这个变量。但是我在代码的某些部分中它作为未定义的变量返回,即使我把它放在所有函数之外,就像全局变量一样。

是否应该有一种特殊的方式在 React 中声明全局变量?

我的 Js React 代码 -- 它是我的代码的一个非常简单的示例,可以提供洞察力

/* 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');
        }  

    }

});

【问题讨论】:

标签: javascript reactjs global-variables


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看看反应上下文:

    https://reactjs.org/docs/context.html

    简单示例:

    const ThemeContext = React.createContext('name');
    

    如果您使用的是 react 16.2 及更低版本,请使用此旧版 react 上下文:

    https://reactjs.org/docs/legacy-context.html

    您可以在任何父组件中声明全局上下文变量,this.context.name 可以跨组件树访问此变量。您只需指定childContextTypesgetChildContext

    或者,如果您想要“丑陋”的方式,请执行以下操作: 在 vars.js 中

    declare var Name = 'empty';
    export default window.Name;
    

    然后在包含“DataAreaOne”和“DataAreaTwo”的文件中导入'./vars'

    import Name from './vars';
    

    然后在类内

    name = Name;
    

    并像这样使用它

    ...
    if(this.name != "something"){
    ...
    

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 2014-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2020-05-10
      • 1970-01-01
      相关资源
      最近更新 更多