我在许多JavaScript库中看到过它(例如transducers-js, routex和redux)。我猜想这是一种命名空间形式,但我无法在任何地方找到解释或至少评论。
我在许多JavaScript库中看到过它(例如transducers-js, routex和redux)。我猜想这是一种命名空间形式,但我无法在任何地方找到解释或至少评论。
@@/"是用户界面特定的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) => {...},
}
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';
type
字段上。它们用于实现reducer,可供与redux
和您自己的状态+操作reducers一起使用。const ActionTypes = {
INIT: `@@redux/INIT${randomString()}`,
REPLACE: `@@redux/REPLACE${randomString()}`,
PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`
}
redux使用"@ @ /"作为常量,用于验证reducer的形状。 ActionTypes.INIT
还在combineReducersgetUnexpectedStateShapeWarningMessage
中进一步使用,以有条件地格式化返回的消息。 ActionTypes.REPLACE
在此pull request中添加以处理验证reducer形状时的恼人警告消息。
简而言之,这些都是"@ @ /"的不同用例。transducers.js使用它们来实现其转换器协议,routex使用它们作为常量,redux使用它们验证输入。它们可能没有单一起源,尽管它们可能受到 @@
的启发。