Проблема с входом в Ant Design Pro.Не понимаю код - PullRequest
0 голосов
/ 06 февраля 2019

Я работал над Ant Design pro.Но я не могу понять модель кода входа.Здесь они используют

effects: {
           *login({ payload }, { call, put }) {}
         }

, если вы хотите увидеть полный код, перейдите по этой ссылке Файл модели входа в систему Ant Design Pro

Здесь вы найдете полный код.Теперь я не понимаю, что означает этот код.

Спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Имя функции со звездочкой означает генератор .Генератор - это function, рабочий процесс которого можно приостановить с помощью ключевого слова yield. yield - двусторонняя связь между генератором и вызывающим абонентом.Обладая этими знаниями, давайте посмотрим на саму функцию:

    *login({ payload }, { call, put }) {
      const response = yield call(fakeAccountLogin, payload);
      yield put({
        type: 'changeLoginStatus',
        payload: response,
      });
      // Login successfully
      if (response.status === 'ok') {
        reloadAuthorized();
        const urlParams = new URL(window.location.href);
        const params = getPageQuery();
        let { redirect } = params;
        if (redirect) {
          const redirectUrlParams = new URL(redirect);
          if (redirectUrlParams.origin === urlParams.origin) {
            redirect = redirect.substr(urlParams.origin.length);
            if (redirect.match(/^\/.*#/)) {
              redirect = redirect.substr(redirect.indexOf('#') + 1);
            }
          } else {
            window.location.href = redirect;
            return;
          }
        }
        yield put(routerRedux.replace(redirect || '/'));
      }
},

function ожидает два объекта в качестве входных данных и сводит их к параметрам.Вам необходимо передать первый параметр как объект, подобный {payload: 'something'}, и атрибут payload этого объекта будет сопоставлен с параметром function.Аналогично, второй передаваемый объект будет нуждаться в вызове и атрибуте put, которые являются функциями.

Сначала он выполняет вызов, передавая fakeAccountLogin и payload, и возвращает функцию, то есть функция приостанавливает работу и отправляет результат.вызова во внешнюю сферу.Когда функция входа в систему возобновляется с использованием .next() function итератора генератора, все, что ему передано, будет присвоено ответу.После этого вызывается put, передавая changeLoginStatus как type и response как payload и результат, если он будет передан вызывающей стороне этого function.

Когда вызывается .next() итератора этого генератора, response.status проверяется на 'ok', и если есть совпадение, то вызывается reloadAuthorized, также инициализируется urlParamsкак params.После этого redirect будет инициализирован с params.redirect, и если это действительно так, redirectUrlParams инициализируется, и произойдут некоторые дальнейшие операции с URL.В любом случае, если есть перенаправление, то функция завершается.

Если response.status было 'ok', но перенаправления не было, то вызывается put и результат получается из function завершение при следующем вызове .next(), function завершится.Если response.status не было 'ok', то function закончился намного раньше, а именно, когда внешний if был оценен как ложный.

Вам нужно взглянуть на сокращение объектов и массивов в Javascriptа также итераторы и функции генератора.У вас будет трудное время, пока вы не выделите для этого время, поэтому чем раньше вы это сделаете, тем лучше.Я рекомендую Главу 2 и Главу 5 этой книги: https://github.com/getify/You-Dont-Know-JS/tree/master/es6%20%26%20beyond

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...