javascript - 导入实例化类集全局原型(prototype)

标签 javascript reactjs ecmascript-6 react-redux es6-class

给定以下 react 组件,我可以从多个组件中导入以下组件。我很困惑为什么在导入每个模块并调用增量之后,它会增加值,就好像它是同一个实例一样。我不认为它附在“ window ”上,因为我做了一些检查。

这可能是因为这设置了一个全局原型(prototype)吗?这仍然不能解释为什么它似乎在更新同一个实例化类。

import React, { Component } from 'react';

class FeatureFlags extends Component {
  constructor (props) {
    super (props);
    this.featureFlagList = [ 'test': true ];
    this.i = 0;
  }

  get showFeatureFlagList () {
    return this.featureFlagList;
  }

  increment () {
    this.i++;
    return this.i;
  }

  setList (list) {
    this.featureFlagList = list;
    return this.featureFlagList;
  }

  render () {
    return (
      <div></div>
    );
  }
}

export default new FeatureFlags;

//First component - 
import FeatureFlags from './FeatureFlags';
console.log('first module ',  FeatureFlags.increment() );  //Logs 1

//Second component
import FeatureFlags from './FeatureFlags';
console.log('second module ',  FeatureFlags.increment() );  //Logs 2

最佳答案

不,是因为你

export default new FeatureFlags;

那是一个例子!多次导入模块将始终导入相同的值。

相反,您应该始终导出类:
export default class FeatureFlags extends Component { … }

并根据需要在其他模块中实例化它:
import FeatureFlags from './FeatureFlags';
const myLocalFlags = new FeatureFlags;
console.log('first module ', myLocalFlags.increment());  //Logs 1

关于javascript - 导入实例化类集全局原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44379087/

相关文章:

javascript - 如何通过POST方法以隐藏形式发送信息?

reactjs - rn-fetch-blob 错误 : RNFetchBlob. fetchBlobForm 未能创建请求正文

javascript - 我在将 Backbone 集合传递给 react 组件时遇到问题

javascript - 如何使用 chat.postmessage 作为工作区用户发布松弛消息?

javascript - 以0开头的console.logging数字

javascript - 在 `state.tree` 中写入 `state.xxxReducer.tree` 而不是 `mapStateToProps` (react redux)

javascript - Angular 1.x ES6 服务 $http 未定义

javascript - 是否可以阻止 prettier 在 Promise.try 之后为 .then() {} 语句添加额外的选项卡?

javascript - es6无法正确导出功能

javascript - 模式窗口上的 Php 表单 ajax “success & fail” 消息