2017-01-18 1 views
2

Я пытаюсь перевести следующие из ES2015 ванили JavaScript:ES2015 определение функции с неявным аргументом

fileA.js

export const checkout = ({ dispatch }) => { 
    dispatch(types.CHECKOUT_REQUEST) 
} 

fileB.js

import checkout; 
checkout(); 

До сих пор (с использованием https://babeljs.io/repl/) У меня есть:

fileA2015.js:

module.exports = { 
    checkout: function (_ref) { 
    dispatch = _ref.dispatch; 
    dispatch(types.CHECKOUT_REQUEST) 
    } 
}; 

Но я не могу понять, что перейти к checkout в FILEB, чтобы иметь доступ к правильному _ref. Что это такое и откуда оно взялось?

+3

Uh, что * это * ваниль JavaScript, никаких рамок не участвует? – Bergi

+1

Если вы ничего не передаете 'checkout()', функция не будет пытаться получить доступ к свойству '.dispatch'. Независимо от того, написано ли это на ES6 или переписано. Я полагаю, вы действительно хотите использовать 'checkout ({dispose (req) {console.log (req);}})'. – Bergi

+0

Кроме того, обратите внимание, что 'import checkout;' не является допустимым оператором, он должен заканчиваться 'from':' import checkout from 'path/to/checkout.module'; ' –

ответ

0
export const checkout = ({ dispatch }) => { 
    dispatch(types.CHECKOUT_REQUEST) 
} 

В приведенной выше функции вы объект уничтожения того, что, как ожидается, иметь dispatch собственности. Где в dispatch - функция обратного вызова.

, когда вы проходите в data объект в качестве параметра, из-за { dispatch }, который destructures объект, который передается в, как ожидается, иметь dispatch собственности.

var data = { 
    dispatch: (type) => { 
     ....... 
    } 
}; 

Таким образом, когда упоминается и вызывается в fileB.jscheckout метод, то вам придется пройти в объект данных в этой точке.

fileB.js

var data = { 
     dispatch: (type) => { 
      ....... 
     } 
    }; 
import checkout; 
checkout(data); 
0

Отметим несколько моментов здесь:

export const checkout = ({ dispatch }) => { 
    dispatch(types.CHECKOUT_REQUEST) 
} 

В приведенном выше коде, checkout() это функция, которая ожидает один параметр - конкретно объект с имущество dispatch. Ожидается, что dispatch будет функцией.

Если вы не проходят какие-либо параметры checkout() (или объект, который не имеет dispatch собственности), dispatch будет неопределенным.

Поэтому вам нужно передать что-то вроде:

checkout({ dispatch: function(){} }) 
Смежные вопросы