我在许多JavaScript库中看到过它(例如transducers-js,routex和redux)。我认为这是一种命名空间,但我无法在任何地方找到解释或至少有任何评论。
答案 0 :(得分:1)
“ @@ /”是well-known symbols的用户域特定域类似物。
通常,“ @@ /”的格式为"@@$NAMESPACE/$property"
,其中$NAMESPACE
是某个域标识符,而$property
是该域的属性。
“ @@ /”并不是完全众所周知的符号,因为,其中之一是字符串。它们也不是该问题中引用的规范的一部分。 “ @@ /”确实类似于众所周知的符号@@
,因为它们都影响特定于域的行为。 @@
的域是“所有代码领域” ==“ JavaScript环境的所有实例” ==几乎所有内容。 “ @@ /”的域为NAMESPACE
。
这里是对converters.js,routex和redux之间“ @@ /”用法的比较
transducers.js-JavaScript中的传感器实现
{
"@@transducer/init": () => {...},
"@@transducer/result": (result) => {...},
"@@transducer/step": (result, input) => {...},
}
您可以在此处实现“ @@ /”方法,以符合converters.js转换器协议。如果某个对象符合转换器协议,则它可以与其他符合此协议的对象组合在一起,以便符合另一个协议:converters.js转换器协议。
routex-用于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';
routex使用“ @@ /”作为常量。它们出现在此路由器的type
的导出操作的actions.js
字段中。它们用于实现reducer,并导出以与redux
和您自己的状态+动作减少器一起使用
redux-管理JavaScript应用程序的状态
const ActionTypes = {
INIT: `@@redux/INIT${randomString()}`,
REPLACE: `@@redux/REPLACE${randomString()}`,
PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
}
redux也使用“ @@ /”作为常量;每个都用于验证异径管的形状。 ActionTypes.INIT
在combineReducers getUnexpectedStateShapeWarningMessage
中进一步用于有条件地格式化返回的消息。在此pull request中添加了ActionTypes.REPLACE
,以在验证减速器形状时处理令人讨厌的警告消息。
简而言之,这些都是“ @@ /”的不同情况。 converters.js使用它们来实现其转换器协议,routex使用它们作为常量,redux使用它们来验证输入。尽管他们可能从@@