正如您在 Redux 源代码的这一行中看到的,动作必须有一个type
属性。在源代码存储库中的真实示例中,有一个类似这样的操作,没有type
声明任何属性。
function fetchUser(login) {
10 return {
11 [CALL_API]: {
12 types: [ USER_REQUEST, USER_SUCCESS, USER_FAILURE ],
13 endpoint: `users/${login}`,
14 schema: Schemas.USER
15 }
16 }
17 }
这里CALL_API
所指的是一个 JavaScript符号
export const CALL_API = Symbol('Call API')
在旁注中,来自 Mozilla 站点,您似乎访问了带有数组括号的符号
var sym = Symbol("foo");
var obj = {[sym]: 1};
所以,回到 redux 代码,在没有显式类型的情况下处理操作的中间件似乎访问了由 CALL_API 创建的属性......
export default store => next => action => {
84 const callAPI = action[CALL_API]
85 if (typeof callAPI === 'undefined') {
86 return next(action)
87 } function fetchUser(login) {
10 return {
11 [CALL_API]: {
12 types: [ USER_REQUEST, USER_SUCCESS, USER_FAILURE ],
13 endpoint: `users/${login}`,
14 schema: Schemas.USER
15 }
16 }
17 }
回到上面引用的第一个代码,如果我像这样从调用 api 周围删除数组括号
function fetchUser(login) {
10 return {
11 CALL_API: {
我收到错误消息,“操作可能没有未定义的“类型”属性”。
问题:例如,在 fetchUser 函数中(正确)使用符号如何满足对操作的类型属性的要求?