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 関数でのシンボルの (正しい) 使用は、アクションの型プロパティの要件をどのように満たしますか?