命名约定"@@ /"(at-at-slash)来自哪里?

Ric*_*ven 5 javascript conventions naming-conventions

我在很多JavaScript库中看到过它(例如,这里,这里这里).我认为它是一种命名空间,但我无法在任何地方找到解释或至少有任何评论.

ric*_*ong 1

“@@/”是用户领域、领域特定的众所周知符号的类似物。

通常,“@@/”的格式为"@@$NAMESPACE/$property",其中$NAMESPACE是某个域标识符,并且$property是该域的属性。

“@@/”并不是众所周知的符号,因为,一方面,它们是字符串;另一方面,它们是字符串。它们也不是该问题中引用的规范的一部分。“@@/”确实类似于众所周知的符号@@,因为它们都影响特定于域的行为。其域@@是“所有代码领域”==“JavaScript 环境的所有实例”== 几乎所有内容。“@@/”的域名是NAMESPACE.

下面是 Transducers.js、routex 和 redux 之间“@@/”用法的比较

Transducers.js - JavaScript 中的转换器实现

{
  "@@transducer/init": () => {...},
  "@@transducer/result": (result) => {...},
  "@@transducer/step": (result, input) => {...},
}
Run Code Online (Sandbox Code Playgroud)

您可以在此处实现“@@/”方法以符合 Transducers.js 转换器协议。如果一个对象符合转换器协议,则它可以与符合此协议的其他对象组合,以便符合另一个协议:transducers.js 转换器协议。

routerx - 用于 redux 的简单路由器

export const ROUTE_CHANGE_START = '@@ROUTEX/ROUTE_CHANGE_START';
export const ROUTE_CHANGE_SUCCESS = '@@ROUTEX/ROUTE_CHANGE_SUCCESS';
export const ROUTE_CHANGE_FAIL = '@@ROUTEX/ROUTE_CHANGE_FAIL';
export const ROUTE_NOT_FOUND = '@@ROUTEX/ROUTE_NOT_FOUND';
export const TRANSITION_TO = '@@ROUTEX/TRANSITION_TO';
Run Code Online (Sandbox Code Playgroud)

Routex 使用“@@/”作为常量。它们出现在type该路由器的导出操作字段中actions.js。它们用于实现减速器,导出以与redux您自己的状态+动作减速器一起使用

redux - 管理 JavaScript 应用程序的状态

const ActionTypes = {
  INIT: `@@redux/INIT${randomString()}`,
  REPLACE: `@@redux/REPLACE${randomString()}`,
  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
}
Run Code Online (Sandbox Code Playgroud)

redux 也使用“@@/”作为常量;其中每一个都用于验证异径管形状。ActionTypes.INIT进一步在combineReducers getUnexpectedStateShapeWarningMessage中用于有条件地格式化返回的消息。在此拉取请求ActionTypes.REPLACE中添加,以在验证减速器形状时处理烦人的警告消息。

简而言之,这些都是“@@/”的不同情况。Transducers.js 使用它们来实现转换器协议,routex 使用它们作为常量,redux 使用它们来验证输入。它们可能没有单一的起源,尽管它们可能从中汲取灵感@@