【问题标题】:check if stylesheet is loaded then render elements检查是否加载了样式表然后渲染元素
【发布时间】:2017-07-31 07:36:04
【问题描述】:

我正在使用 react、redux、react-router 和 react-helmet 开发通用反应应用程序。我的应用程序中的每个页面都有单独的样式表。 当客户端的路由发生变化时,起初,元素还没有样式。几毫秒后,我的页面变得丑陋了! 我想要解决这个问题。我如何知道样式表何时加载?

我的容器组件:

render() {
        return (
            <div>
                <Helmet>
                    <title>MyTitle</title>
                    <link rel="stylesheet" href="../search-page.css"/>
                </Helmet>
                <div id="container"">
                   <MyComponents />
                </div>
            </div>
        )
    }

【问题讨论】:

  • 将样式表放在网站&lt;head&gt; 标记中。然后在HTML 之前加载所有样式。
  • @Red 我使用 Helmet,所以我的样式表自动进入 。
  • 作为使用helmet 加载样式的替代方法,我建议使用isomorphic-style-loader github.com/kriasoft/isomorphic-style-loader

标签: javascript reactjs redux react-router react-helmet


【解决方案1】:

尚未对其进行测试,但我认为您可以为您的 &lt;link /&gt; 标签注册一个 onLoad 侦听器,该标签将设置状态标志,触发组件的呈现。

class MyComponent extends Component {
  state = { loaded: false };
  onLoad = () => this.setState({ loaded: true });
  render() {
    return (
      <div>
        <Helmet>
          <title>MyTitle</title>
          <link rel="stylesheet" href="../search-page.css" onLoad={this.onLoad} />
        </Helmet>
        {this.state.loaded && 
          <div id="container">
            <MyComponents />
          </div>
        }
      </div>
    );
  }
}

编辑:因为看起来&lt;link /&gt; 标签的 onLoad 钩子没有触发,不同的方法可能是这样的:

class MyComponent extends Component {
  state = { loaded: false };
  componentDidMount() {
    const sheet = document.createElement('link');
    sheet.rel = 'stylesheet';
    rel.addEventListener('load', this.onLoad);
    rel.href = '../search-page.css';
  }
  onLoad = () => this.setState({ loaded: true });
  render() { /* as before */ }
}

【讨论】:

  • 不幸的是它不起作用。它永远不会进入 onLoad 函数
  • 哎哟。 onload - 有一个小 L 怎么样?不确定 react 如何处理加载事件。
  • 添加了一种不同的方法 - 也未经测试 - 这是我预加载图像的方式 - 也许它也可以用于此目的?
猜你喜欢
  • 2021-04-27
  • 2013-02-15
  • 2017-12-30
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2020-01-29
相关资源
最近更新 更多