Как применить таблицу стилей из внешнего URL-адреса к указанному c реагирующему компоненту - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть несколько веб-страниц, и у меня есть это:

index. html

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>React App</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet"  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <link rel="stylesheet"  href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/superhero/bootstrap.min.css">
</head>
<body>
<div class="full-height">
    <div id="app" class="full-height">Loading...</div>
</div>
</body>
<script
        src="https://code.jquery.com/jquery-3.2.1.slim.min.js"
        integrity="sha256-k2WSCIexGzOj3Euiig+TlR8gA0EmPjuc79OEeY5L45g="
        crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</html>

Если я использую это

<link rel="stylesheet"  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link rel="stylesheet"  href="https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/superhero/bootstrap.min.css">

в индексе. html, это влияет на стили всего моего приложения, но я хочу использовать их в одном компоненте.

Я попытался решить эту проблему, удалив эти две строки и создав чат ..s css

#chat{
  @import url("https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css");
  @import url("https://maxcdn.bootstrapcdn.com/bootswatch/3.3.7/superhero/bootstrap.min.css");
}

//other import statements
import "../../styles/chat.scss"

затем я установил id компонента чата на 'chat' и применил s css

export default class Chat extends React.Component {
render() {
    return (
        <div id="chat">
            <div className="full-height">
                <div className="row">
                    <Nav/>
                </div>
                <div className="row full-height">
                    <div className="col-md-3 full-height">
                        <UserProfile/>
                        <OnlineUsers/>
                    </div>
                    <div className="col-md-9 full-height">
                        <div className="full-height">
                            <Messages/>
                            <MessageInput/>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    );
}

}

Этот подход имеет тот же результат, что и импорт стилей в индекс. html. Он затрагивает все страницы.

Мой вопрос заключается в том, как я могу применить эти таблицы стилей только для компонента чата.

1 Ответ

0 голосов
/ 06 мая 2020

Мое решение - это обходной путь, которым я не горжусь, но именно так вы можете динамически отключить таблицу стилей в javascript:

Все таблицы стилей на веб-странице можно найти внутри document.styleSheets коллекция. Чтобы получить первое, что вызвало у меня проблемы:

var stylesheet = document.styleSheets[0];

, я просто отключил его в своем компоненте:

stylesheet.disabled = true;
...