[class^="chat__root__"]
. Заметьте я использовал не полное имя класса, а только начало и модификатор ^=
указывающий сверять только начало(если класс не первый, то можно использовать *=
). Почему? Потому что "непонятные буковки" в конце - это генерируемый при сборке хэш, который поменяется при выпуске следующей версии фронта и если вы к нему привяжитесь - ваш скрипт очень скоро перестанет работать.// @run-at document-start
function addCss(css, root = window) {
const style = root.document.createElement('style');
style.innerHTML = css;
(root.document.head || root.document.documentElement).append(style);
return style;
}
const css = `
[class^="chat__root__"] {
dislpay: none !important;
}
`;
addCss(css);
// @run-at document-start
const css = `
[class^="chat__root__"] {
dislpay: none !important;
}
`;
// отлавливаем загрузку фреймов
new MutationObserver(() => {
document.querySelectorAll('iframe:not([us-processed]').forEach((iframe) => {
if (isAccessibleFrame(iframe)) {
// добавляем наш css
addCss(css, iframe.contentWindow);
// на случай если содержимое фрейма перепишут позднее
iframe.addEventListener('load', () => addCss(css, iframe.contentWindow));
}
// помечаем что обработали этот фрем, чтоб не повторять
iframe.setAttribute('us-processed', true);
});
}).observe(document, {childList: true, subtree: true});
// проверяем что содержимое фрейма доступно
function isAccessibleFrame(iframe) {
try {
iframe.contentWindow.test
return true
} catch (e) {
return false
}
}
Swiper
не ждёт свойства spaceBetween
. Вы уверены, что оно хоть что-то делает?Swiper
и на самом деле он такое свойство ждёт, то вам следует репортить этот баг автору компонента (предварительно обновившись до последней версии).declare module 'путь до типов компонента Swiper' {
interface SwiperProps {
spaceBetween: number;
}
}
<Row justify="space-around">
<Col flex="none">
...
</Col>
<Col flex="none">
...
</Col>
</Row>
<Row>
<Col span={12}>
<Row justify="center">
<Col flex="none">
...
</Col>
</Row>
</Col>
<Col span={12}>
<Row justify="center">
<Col flex="none">
...
</Col>
</Row>
</Col>
</Row>
const ThemeProvider: FC = ...;
ThemeProvider
имеет тип FC
, и пофиг что ты там дальше пишешь. Тип FC
по умолчанию не имеет children
.const ThemeProvider: FC<{children: ...}> = ...;
const ThemeProvider = ({ children }: ...) => ...;
props
, children
это поле props
, а не верхний аргумент.const ThemeProvider: FC<PropsWithChildren> = ...
PropsWithChildren
- тип помощник, добавляющий children
к объекту, например PropsWithChildren<{
prop2: string;
prop3: number
}>
но без дженерика просто отдаёт тип вида {
children?: ReactNode | undefined;
}
dangerouslySetInnerHTML
то предварительно её почистить можно так:function removeStyles(html) {
const container = document.createElement('div');
container.innerHTML = html;
container.querySelectorAll('style').forEach(
style => style.remove()
);
return container.innerHTML;
}
MutationObserver
или банальный setTimeout
. Однако в таком случае стили могут успеть отрисоваться до удаления, из-за чего может происходить мерцание.document.createElement
, отфильтровая ненужный style
. Но всё это уже требует понимания.:) _next
там где должен быть build
. Возможно одна из переменных окружения у вас кривая, или .env
файл. Если сходу не находится откуда взялся _next
- можно минимально оформатировать в ide уже собранные файлы и поискать в них это _next
, окружающий код скорее всего о чём-нить скажет вам./_next/static/chunks/
- это путь по умолчанию, если нужен иной - следует задать assetPrefix
._next
, а вы её переименовали? docx
явно не входит в стандартный набор форматов для front-end тебе потребуется установить и настроить специальный loader\плагин\asset в зависимости от системы сборки.fetch
.React.cteateElement(Component, ...)
вместо <Component ...>
. Про 60% библиотек и вспомогательных утилит тоже можно будет забыть, с ещё 20% придётся хорошенько повозиться чтоб запустить.RegisterService
?<RegisterService ...>
или React.createElement(RegisterService, ...)
. use
- useRegisterService
(отсутствие префикса не приведёт к ошибке, но это стандарт).import(`../Screen/About/${currentScreen.name}.jsx`);
И помните, что в бандле будет ВСЁ по маске `../Screen/About/*.jsx`
. ?.
, а у пользователя старый фокс.>N
вместо last 1
который там наверняка по дефалту.