Рубрики
Без рубрики

Извлеченные уроки: Python to JavaScript

Следующее – только некоторые вещи, которые мне нашел интересным, когда я нырну глубже … Tagged с Python, JavaScript, WebDev, React.

Следующее – только некоторые вещи, которые мне нашел интересными, когда я глубже погружаюсь в мир JavaScript.

Некоторый фон

В Bloomberg я работаю с командой DevOps/Infrastructure, которая очень активно занимается аппаратным обеспечением, сетью и сценариями. Это означает, что все в моей команде очень хороши в Bash, Ansible и Python, и, вероятно, могут выбросить больше сетевых сокращений, чем секунд в день.

Вскоре после того, как я присоединился, мы начали думать о веб -панели управления, которая будет управлять и автоматизировать многие из наших ручных процессов и задач. Мы планировали все функции, чтобы включить, и это должно было быть Так круто … За исключением того, что я был единственным в команде, которая знала что -нибудь о веб -разработке, и даже это была свободная ассоциация.

Моим предыдущим опытом было написание бэкэндов и API для веб -компаний, но у меня действительно не было опыта на передней части вещей. Для этого проекта веб -панели я хотел по -настоящему погрузиться и научиться правильно реагировать, создав полное приложение самостоятельно.

Что я выучил

Ниже приведены лишь некоторые вещи, которые я узнал или нашел интересные о JavaScript, React и Front End Development, исходящем с точки зрения Python и Backend. Обратите внимание, что я строю приложение React, поэтому многие из этих вещей сильно вращаются вокруг библиотеки.

NPM DEV зависимости от зависимостей

Я действительно не понял этого, пока не начал создавать изображения Docker для моего приложения для экспресс-реакции. В Python у меня всегда был бы dev-requirements.txt Файл, который содержал мои библиотеки тестирования и линии и Требования.txt Это держало все другие зависимости. Действительно приятно, что оба они остаются в Package.json , Очистка структуры проекта и облегчение автоматизации установки.

Структура не имеет значения, пока она работает

При разработке я постоянно перемещаю файлы и папки, пытаясь достичь лучшей структуры проекта. У меня всегда есть мышление Будет ли это работать, если я добавлю больше вещей? , и это обычно приводит к бесконечной кроличьей дыре управления структурой проекта вместо кодирования.

То, что я узнал из разных постов в Интернете, и, по своему собственному опыту, React не заботится о том, какую структуру проекта вы используете, и поэтому вы тоже. Очевидно, что старайтесь держать его в чистоте и организованную, но, кроме того, если что -то работает для вас, не беспокоитесь о том, чтобы рефактировать его, пока не придется. Я фанат моей текущей структуры папок, которая выглядит примерно как следующее. Обратите внимание, что я пропустил файлы.

.
├── __mocks__
├── bin                # Scripts needed to run Docker image
├── certs              # Any certs I need for local dev. These are mounted to container
├── dist               # Build directory
├── screenshots
├── src
│   ├── assets         # Non-JS or styling assets
│   │   ├── images
│   │   └── jss        # I use MaterialUI, which styles using JSS
│   ├── components     # General use components
│   │   └── hoc        # Higher order components
│   ├── config         # Configuration file for server that loads env to object
│   ├── core           # Anything that is crucial to the React app
│   │   ├── layout     # Core layout components
│   │   │   ├── header
│   │   │   └── sidebar
│   │   ├── pages      # Not Found / Landing pages
│   │   ├── state      # Core managed state, aka users and theme
│   │   │   ├── auth
│   │   │   └── meta
│   │   └── util       # Any usable themes
│   ├── pages          # List of top level React Router routes as 'pages'
│   ├── server         # All code pertaining to the Express server
│   └── tests          # All tests
└── webpack            # Webpack configs for server and client

Государственное управление/чистящие компоненты

Управление государством в Python для меня на самом деле не существует, особенно если оно для большего количества сценариев. Я обычно предпочитаю композицию по сравнению с наследством, но это всегда было из -за того, что я узнал в школе. Написание компонентов React действительно выделяло эту идею.

Компоненты состоят из меньших, возможно, многоразовых компонентов, которые каждый уровень в иерархии отвечает за рендеринг и/или поддержание определенной части применения. Это действительно классное чувство – уменьшить кодовые линии, потому что я узнал умные способы, которыми компоненты были либо связаны, либо могли составлять друг друга.

Вся идея эффекта водопада с реквизитом и состоянием от родительских компонентов действительно классная, чтобы увидеть вживую, как только вы поймете, что происходит. Это было то, что я не понял сначала, но мой код и отношения между компонентами стали намного лучше, поскольку я понял правильное управление государством.

Обещания сначала сбивают с толку.

Исходя из синхронного мира питона/сценариев, JavaScript обещания сделаны нулевой смысл Для меня примерно 3 дня назад, так что не ненавидите, если мои примеры ниже все еще плохие. Долгое время я пытался дать обещания синхронным, и я был бы настолько смущен тем, почему такие вещи, как следующее, вернули обещание.

function fetchSomething() {
  const fetchURL = '/something';
  return axios.get(fetchURL);  // returns a promise
}

// Handling the axios call like a synchronous
// function leds to tons of horrible callback 
// and uncaught promise exceptions 🤷🏼‍♂️
function getSomethingHandler(callback) {
  fetchSomething()
    .then(response => { callback(response.data) })
}

Но теперь я понимаю все тогда (обратный вызов) , Catch (Errcallback) поток, и это делает намного больше смысла Анкет На следующей итерации я переписал его как следующее, что немного лучше:

function fetchSomething() {
  const fetchURL = '/something';
  return new Promise((resolve, reject) => {
    axios.get(fetchURL)
      .then(response => { resolve(response.data) })
      .catch(error => { reject(error) })
  });
}

// Handling the axios call like a synchronous
// function leds to tons of horrible callback 
// and uncaught promise exceptions 🤷🏼‍♂️
function getSomethingHandler(callback) {
  fetchSomething()
    .then(data => { res.send(data) }) })
}

Эта версия остановила многие из этих исключений обратного вызова и обещания. Это также позволило моим функциям обработчика ожидать, что данные, которые уже переведены в мой желаемый формат с помощью функций выбора. Наконец, я начал использовать асинхро и Ждите . Я все еще сомневаюсь в этом, поэтому я прошу прощения, если следующее не правильно.

async function fetchSomething() {
  const fetchURL = '/something';
  try {
    // Wait for the axios promise to resolve
    const response = await axios.get(fetchURL);
    return response.data;
  } catch (err) {
    console.log(err)
    return err;
  }
}

function getSomethingHandler(callback) {
  fetchSomething()
    .then(data => { res.send(data) }) })
}

Я все еще активно узнаю больше об этом асинхронном рабочем процессе, но пока это довольно круто.

Бонус CSS: Flexbox потрясающий

Больше вещей CSS, но одним из основных факторов, которые мешали мне попасть в дизайн переднего конца, было связано с выравниванием элементов и размерами. Независимо от того, что маржа s или Выровнять Ценности, которые я положил, казалось, ничего не сработало. Это был мой первый настоящий опыт игры с Flexbox в CSS3 и О, щелчок Это имеет мир разницы. Между Flex-Row , Flex-Basis , оправдать и Выравнивающие элементы , позиционирование вещей в HTML намного проще.

Закрытие

Хотя я мог бы поговорить о гораздо больше вещей, это были некоторые из самых важных событий, которые я имел с JavaScript, Express и React за последние несколько месяцев. Я мог бы написать второй пост в будущем, когда мой проект созревает.

Спасибо за чтение 👍😃

Оригинал: “https://dev.to/dstarner/lessons-learned-python-to-javascript-4lae”