Forwarded from ChatGPT Midjourney :: BotHub Bot
URL (Uniform Resource Locator) - это строка, которая определяет адрес ресурса в Интернете. Она имеет следующую структуру:
1. Протокол (
2. Имя хоста (
3. Порт (
4. Путь (
5. Параметры запроса (
6. Фрагмент (
Примеры URL-адресов:
-
-
-
Обратите внимание, что не все компоненты URL обязательны и могут быть опущены в зависимости от конкретного URL-адреса и ситуации.
/continue
protocol://hostname:port/path?query#fragment
1. Протокол (
protocol): указывает протокол, по которому будет осуществлен доступ к ресурсу. Например, http://, https://, ftp://, file:// и т.д.2. Имя хоста (
hostname): указывает доменное имя или IP-адрес сервера, на котором расположен ресурс. Например, www.example.com или 192.168.0.1.3. Порт (
port, необязательный): указывает номер порта, через который будет осуществлено соединение с сервером. Например, 80 для HTTP, 443 для HTTPS и т.д. Если порт не указан, то используется порт по умолчанию для каждого протокола.4. Путь (
path, необязательный): указывает путь к конкретному ресурсу на сервере. Например, /path/to/resource.5. Параметры запроса (
query, необязательный): указывает дополнительные параметры запроса в виде строки. Параметры разделяются символом &, а каждый параметр состоит из имени и значения, разделенных символом =. Например, ?param1=value1¶m2=value2.6. Фрагмент (
fragment, необязательный): указывает идентификатор фрагмента внутри ресурса. Например, #section1. Фрагмент обычно используется для навигации внутри документа HTML.Примеры URL-адресов:
-
https://www.example.com-
http://192.168.0.1:8080/path/to/resource-
https://www.example.com/search?query=example&page=1#resultsОбратите внимание, что не все компоненты URL обязательны и могут быть опущены в зависимости от конкретного URL-адреса и ситуации.
-5 056 caps/continue
import 'whatwg-fetch';
export default () => {
// BEGIN (write your solution here)
const formInputs = document.querySelectorAll('.form-control');
formInputs.forEach((formInput) => {
formInput.addEventListener('input', async (e) => {
try {
const url = new URL(e.target.dataset.autocomplete, window.location.origin);
url.searchParams.append('search', e.target.value);
const response = await fetch(url);
const names = [...(await response.json())];
const defaultListItem = document.createElement('li');
defaultListItem.textContent = 'Nothing';
const listItems = names.length === 0 ? [defaultListItem] :
names.map((name) => {
const li = document.createElement('li');
li.textContent = name;
return li;
});
const ul = document.querySelector(`ul[data-autocomplete-name="${formInput.dataset.autocompleteName}"]`);
console.log(ul);
ul.innerHTML = '';
listItems.forEach((item) => {
ul.append(item);
});
} catch (error) {
console.log(error);
throw error;
}
});
});
// END
};
Архитектура фронтенда
// реализация c помощью классов:
class View {
constructor(){
this.submit = null;
this.input = null;
}
init() {
this.submit = document.querySelector(/* .... */);
this.input = document.querySelector(/* .... */);
}
render(state) {
this.submit.disabled = !state.registrationForm.valid;
if (state.registrationForm.valid) {
this.input.style.border = null;
} else {
this.input.style.border = 'thick solid red';
}
}
}
const view = new View();
view.init(); // тут делаем выборки
view.render(state);
// реализация с помощью функций:
const init = () => {
const submit = document.querySelector(/* .... */);
const input = document.querySelector(/* .... */);
const state = /* данные состояния */;
// ...
return {
state,
elements: {
input,
submit,
},
};
};
const render = (elements) => { ... };
const elements = init();
render(elements);
Forwarded from Yoshi Hoshi
/* eslint-disable no-param-reassign */
// @ts-check
// BEGIN (write your solution here) (write your solution here)
const render = ({ state, elements }) => {
state.companies.forEach((company) => {
const button = document.createElement('button');
button.classList.add('btn', 'btn-primary');
button.dataset.id = company.id;
button.textContent = company.name;
elements.container.append(button);
});
};
const renderDescription = ({ state, elements }) => {
if (elements.container.querySelector('div')) {
elements.container.querySelector('div').remove();
}
const descriptionEl = document.createElement('div');
const accordion = state.uiState.accordion;
const visibleEl = accordion.find((item) => item.descriptionVisibility === true);
if (visibleEl) {
descriptionEl.textContent = state.companies.find((company) => company.id === visibleEl.id).description;
elements.container.append(descriptionEl);
}
};
export default (companies) => {
const init = () => {
const accordion = companies.map(({ id, }) => {
return { id, descriptionVisibility: false };
});
const container = document.querySelector('.container');
const state = {
companies,
uiState: {
accordion,
},
};
return {
state,
elements: {
container,
},
};
};
const viewData = init();
render(viewData);
document.querySelectorAll('.btn').forEach((btn) => {
btn.addEventListener('click', (e) => {
const uiState = viewData.state.uiState;
const targetElId = parseInt(e.target.dataset.id, 10);
const visibleEl = uiState.accordion.find((item) => item.descriptionVisibility === true);
if (!visibleEl) {
uiState.accordion.find((item) => item.id === targetElId).descriptionVisibility = true;
console.log('Описание создается', uiState.accordion);
} else {
visibleEl.descriptionVisibility = false;
console.log('Описание удаляется', uiState.accordion);
if (visibleEl.id !== targetElId) {
uiState.accordion.find((item) => item.id === targetElId).descriptionVisibility = true;
console.log('Описание переприсваивается', uiState.accordion);
}
}
renderDescription(viewData);
});
});
};
// END
Forwarded from ChatGPT Midjourney :: BotHub Bot
Определение абстракции в программировании означает создание уровня интерфейса, который скрывает детали реализации и предоставляет только необходимую информацию или функциональность для работы с объектом или модулем.
Абстрагирование позволяет разделять сложные системы на более простые составляющие и работать с ними на более высоком уровне абстракции, не вдаваясь в детали реализации. Это упрощает понимание кода, его использование и поддержку, а также способствует повторному использованию кода.
Примеры абстракции в программировании включают в себя использование функций для сокрытия деталей алгоритмов, создание классов и объектов для моделирования реальных сущностей, а также использование интерфейсов для определения контрактов взаимодействия между компонентами.
Создание хорошо абстрагированных компонентов позволяет улучшить читаемость кода, управляемость проекта и облегчить его дальнейшее развитие.
/continue
Абстрагирование позволяет разделять сложные системы на более простые составляющие и работать с ними на более высоком уровне абстракции, не вдаваясь в детали реализации. Это упрощает понимание кода, его использование и поддержку, а также способствует повторному использованию кода.
Примеры абстракции в программировании включают в себя использование функций для сокрытия деталей алгоритмов, создание классов и объектов для моделирования реальных сущностей, а также использование интерфейсов для определения контрактов взаимодействия между компонентами.
Создание хорошо абстрагированных компонентов позволяет улучшить читаемость кода, управляемость проекта и облегчить его дальнейшее развитие.
-4 488 caps/continue
Forwarded from ChatGPT Midjourney :: BotHub Bot
Компоненты высшего порядка (Higher-Order Components, HOC) являются функциями, которые принимают компонент в качестве аргумента и возвращают новый компонент. Они используются для повторного использования логики и функциональности между различными компонентами. Ниже приведены некоторые типы и примеры использования компонентов высшего порядка:
1. **Логические компоненты высшего порядка (HOC)**:
- HOC для управления аутентификацией: компонент, который проверяет статус аутентификации пользователя и редиректит на другую страницу при необходимости.
- HOC для управления доступом к данным: компонент, который загружает и передает данные компоненту в зависимости от определенных условий.
2. **Компоненты высшего порядка для обработки состояния (State HOC)**:
- HOC для управления состоянием: компонент, который управляет общим состоянием для нескольких дочерних компонентов.
- HOC для обработки событий: компонент, который обрабатывает события и передает их обработанные данные дочерним компонентам.
3. **Компоненты высшего порядка для стилизации (Styling HOC)**:
- HOC для применения стилей: компонент, который добавляет стили или классы к дочерним компонентам.
- HOC для адаптивного дизайна: компонент, который обеспечивает адаптивное поведение для различных разрешений экрана.
4. **Компоненты высшего порядка для маршрутизации (Routing HOC)**:
- HOC для защиты маршрутов: компонент, который проверяет доступ пользователя к определенным маршрутам.
- HOC для анимации маршрутов: компонент, который добавляет анимацию при переходе между маршрутами.
Это лишь несколько примеров типов и использования компонентов высшего порядка. HOC могут быть мощным инструментом для повторного использования логики и функциональности в вашем React приложении.
1. **Логические компоненты высшего порядка (HOC)**:
- HOC для управления аутентификацией: компонент, который проверяет статус аутентификации пользователя и редиректит на другую страницу при необходимости.
- HOC для управления доступом к данным: компонент, который загружает и передает данные компоненту в зависимости от определенных условий.
2. **Компоненты высшего порядка для обработки состояния (State HOC)**:
- HOC для управления состоянием: компонент, который управляет общим состоянием для нескольких дочерних компонентов.
- HOC для обработки событий: компонент, который обрабатывает события и передает их обработанные данные дочерним компонентам.
3. **Компоненты высшего порядка для стилизации (Styling HOC)**:
- HOC для применения стилей: компонент, который добавляет стили или классы к дочерним компонентам.
- HOC для адаптивного дизайна: компонент, который обеспечивает адаптивное поведение для различных разрешений экрана.
4. **Компоненты высшего порядка для маршрутизации (Routing HOC)**:
- HOC для защиты маршрутов: компонент, который проверяет доступ пользователя к определенным маршрутам.
- HOC для анимации маршрутов: компонент, который добавляет анимацию при переходе между маршрутами.
Это лишь несколько примеров типов и использования компонентов высшего порядка. HOC могут быть мощным инструментом для повторного использования логики и функциональности в вашем React приложении.