rapflow
2 subscribers
4 photos
1 file
11 links
Download Telegram
URL (Uniform Resource Locator) - это строка, которая определяет адрес ресурса в Интернете. Она имеет следующую структуру:

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&param2=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
интерфейс класса url
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
Е бля
Forwarded from Yoshi Hoshi
Я выполнил это задание жесткое
Forwarded from Yoshi Hoshi
Сегодня успел
Forwarded from Yoshi Hoshi
Даже полуночи не наступило
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 Yoshi Hoshi
Вот такое полотно кода получилось
Определение абстракции в программировании означает создание уровня интерфейса, который скрывает детали реализации и предоставляет только необходимую информацию или функциональность для работы с объектом или модулем.

Абстрагирование позволяет разделять сложные системы на более простые составляющие и работать с ними на более высоком уровне абстракции, не вдаваясь в детали реализации. Это упрощает понимание кода, его использование и поддержку, а также способствует повторному использованию кода.

Примеры абстракции в программировании включают в себя использование функций для сокрытия деталей алгоритмов, создание классов и объектов для моделирования реальных сущностей, а также использование интерфейсов для определения контрактов взаимодействия между компонентами.

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

-4 488 caps

/continue
Можно ли сделать componentDidMount() асинхронной функцией?
Компоненты высшего порядка (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 приложении.
Channel name was changed to «Kushbag»
Channel name was changed to «Trapharmacy»
Channel name was changed to «rapflow»