我可以从 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 导入一种方法吗的主要内容,如果未能解决你的问题,请参考以下文章