首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React + Nextjs -外部脚本加载但不一起执行

问React + Nextjs -外部脚本加载但不一起执行
EN

Stack Overflow用户
提问于 2019-11-14 06:48:41
回答 2查看 3.8K关注 0票数 0

我有一个下一个js应用程序,我需要通过从父站点导入页眉和页脚来将其与现有站点集成。标记和支持库是通过JS文件传递的,页眉和页脚各有一个。下面是我的_apps.js、navigation.js和footer.js文件的外观:

_app.js:

代码语言:javascript
复制
render() {
    return (
      <Provider store={reduxStore}>
        <Head headerData={newStaticData} />
        <Navigation />
        <OtherComponents />
        <Footer />
      </Provider>
    );
  }

navigation.js:

代码语言:javascript
复制
class Navigation extends Component {
    shouldComponentUpdate() {
        return false;
    }

    componentDidMount() {
        const script = document.createElement('script');
        script.src = "https://mainsite.com/external/header.js";
        script.async = true
        document.body.appendChild(script);
    }

    render() {
        return (
            <div id="target_div_id"></div>
        )
    }
}

export default Navigation;

footer.js:

代码语言:javascript
复制
class Footer extends Component {
    shouldComponentUpdate() {
        return false;
    }

    componentDidMount() {
        const script = document.createElement('script');
        script.src = "https://mainsite.com/external/footer.js";
        script.async = true
        document.body.appendChild(script);
    }

    render() {
        return (
            <div id="footer_target_id"></div>
        )
    }
}

export default Footer;

当我运行这段代码时,只会显示主导航,而不会显示页脚。如果它注释掉了导航,那么页脚就会出现。我不知道为什么,但它看起来一次只加载一次。我试过使用script.defer=true,但也没有用。

有没有人能建议一下可能是什么原因造成的,解决方案是什么?

蒂娅。

EN

回答 2

Stack Overflow用户

发布于 2019-11-14 13:46:19

即使在子组件中,您也可以使用react-helmet轻松完成此操作

代码语言:javascript
复制
import React from "react";
import {Helmet} from "react-helmet";
class Navigation extends Component {
render() {
    return (
        <div id="target_div_id">
        <Helmet>
            <script type="text/javascript" href="https://mainsite.com/external/header.js" />
        </Helmet></div>
    )
 }
}
export default Navigation;

尝试使用react挂钩而不是react组件生命周期

代码语言:javascript
复制
const Navigation = ()=> {
 return (
        <div id="target_div_id">
        <Helmet>
            <script type="text/javascript" href="https://mainsite.com/external/header.js" />
        </Helmet></div>
    )
}

export {Navigation} ;

// parent 
import {Navigation} from "../Navigation.js";
票数 1
EN

Stack Overflow用户

发布于 2019-11-14 13:12:24

我建议你不要使用_app.js来完成这个任务。

尝试创建布局文件,如下所示:

代码语言:javascript
复制
// MainLayout.js
import NavBar from './Navigation.js'
import Footer from './Footer.js'

export default ({ children }) => (
  <>
    <Navigation />
    {children}
    <Footer />
  </>
)

让你的主文件像这样:

代码语言:javascript
复制
// index.js
import React from 'react'
import MainLayout from '../components/Layouts/MainLayout.js'
import Banner from '../components/Banner/Banner.js'

export default function Home() {
  return (
    <>
      <MainLayout>
        <Banner />
      </MainLayout>
    </>
  )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58846814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档