我可以从 object.freeze 导入一种方法吗

Posted

技术标签:

【中文标题】我可以从 object.freeze 导入一种方法吗【英文标题】:Can I import one method from object.freeze 【发布时间】:2019-01-22 02:34:09 【问题描述】:
export default Object.freeze(
  fetchReseller: ( offset, limit ) => (
     type: FETCH_RESELLER,
     payload:  offset, limit ,
  ),
// deleteReseller: ... etc
)

如何只导入一种方法,例如fetchReseller, 我不需要这个 Object.freeze 中的所有内容。

从 './actions/Reseller' 导入 fetchReseller

没用

【问题讨论】:

【参考方案1】:

这是不可能的,因为您正在导出整个对象。

导入语法如

import  fetchReseller  from './actions/Reseller'

在有命名导出的情况下工作:

export const fetchReseller = ...

参考:https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Statements/export#Description

【讨论】:

【参考方案2】:
export const fetchReseller = arg=> ( type: "TYPE", payload:arg  );

export default Object.freeze(
    fetchReseller,
   // deleteReseller: ... etc
);

【讨论】:

【参考方案3】:

除非您将代码重构为@hsz 建议的模式,否则我认为您无法做到这一点。如果不想重构,可以使用解构技术:

import theWholeObject from './actions/Reseller';

const  fetchReseller  = theWholeObject;

然后就可以使用fetchReseller()函数了。

优势: Babel 将从该对象中提取该函数并将其存储在 const 中。如果您使用的是 webpack(特别是 webpack v4),一个名为 TreeShaking (or uglify) 的进程将从您的模块中删除该对象的其余部分。因此,捆绑的文件将仅具有 fetchReseller 功能,因此文件大小根本不会增加。 您可以通过在逗号分隔的大括号内包含更多方法来导入多个方法。

const  fetchReseller, anotherMethod  = theWholeObject;

请记住,@hsz 建议的模式是行业标准。即您应该分别导出您的操作。

export const methodOne = () => 

export const methodTwo = () => 

export const methodThree = () => 

【讨论】:

以上是关于我可以从 object.freeze 导入一种方法吗的主要内容,如果未能解决你的问题,请参考以下文章

Object.freeze()

Object.freeze

自己封装一个Object.freeze()方法

有没有办法 Object.freeze() 一个 JavaScript 日期?

Object.freeze与 Object.seal的区别

使用 Object.freeze 和 object.unfreeze 来减少具有大量表数据行的响应式页面中的内存膨胀