function makeAction(type) {
return ({ dispatch }, ...args) => dispatch(type, ...args);
};這段代碼是vuex中actions.js里的代碼,通過babel轉成es5后代碼如下:function makeAction(type) {
return function (_ref) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
var dispatch = _ref.dispatch;
return dispatch.apply(undefined, [type].concat(args));
};
};疑問如下:這里的dispatch從哪里定義的?這段代碼的作用?感謝各位大神的悉心回答?。。?!
2 回答

四季花海
TA貢獻1811條經驗 獲得超5個贊
官方文檔的說法是:觸發 mutation handler 的方法是 dispatch 一個 mutation 的事件名。
function makeAction(type) { return ({ dispatch }, ...args) => dispatch(type, ...args); };
我理解的是:這段代碼的作用就是觸發一個名為‘type‘的mutaition事件,...args是額外的參數。
但是這里的{ dispatch }參數我不明白是什么,希望大神能幫忙補充一下。

交互式愛情
TA貢獻1712條經驗 獲得超3個贊
這個是 es6 的語法,是“解構賦值使用”, 比如:
function foo({x, y = 5}) {
? console.log(x, y);
}
foo({}) // undefined, 5
foo({x: 1}) // 1, 5
foo({x: 1, y: 2}) // 1, 2
foo() // TypeError: Cannot read property 'x' of undefined
對于 vuex 中的 action 來說,actions 調用的第一個參數是store
的實例,有dispatch
等方法屬性,調用相當于:
function?foo({dispatch})?{ ??dispatch(); } foo({dispatch:?function(){...}})
添加回答
舉報
0/150
提交
取消