“@@/”是well-known symbols 的用户级、特定领域的类似物。
通常,“@@/”的格式为"@@$NAMESPACE/$property",其中$NAMESPACE 是某个域标识符,$property 是该域的属性。
"@@/" 并不是众所周知的符号,因为它们是字符串;它们也不是该问题中引用的规范的一部分。 “@@/”确实类似于众所周知的符号@@,因为它们都影响特定于域的行为。 @@ 的域是“所有代码领域”==“JavaScript 环境的所有实例”== 几乎所有内容。 “@@/”的域是NAMESPACE。
这里是“@@/”在transducers.js、routex、redux之间的使用对比
transducers.js - JavaScript 中的转换器实现
{
"@@transducer/init": () => {...},
"@@transducer/result": (result) => {...},
"@@transducer/step": (result, input) => {...},
}
您可以在此处实现“@@/”方法以符合transducers.js 转换器协议。如果一个对象符合转换器协议,它可以与符合此协议的其他对象组合,以符合另一个协议:transducers.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 使用“@@/”作为常量。它们出现在此路由器的actions.js 的导出操作的type 字段中。它们用于实现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 以在验证减速器形状时处理烦人的警告消息。
简而言之,这些都是“@@/”的不同情况。转换器.js 使用它们来实现他们的转换器协议,routex 使用它们作为常量,redux 使用它们来验证输入。他们可能没有单一的起源,尽管他们可能从@@获得灵感