Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 路由更改时重新渲染脚本_Javascript_Reactjs_Gatsby - Fatal编程技术网

Javascript 路由更改时重新渲染脚本

Javascript 路由更改时重新渲染脚本,javascript,reactjs,gatsby,Javascript,Reactjs,Gatsby,我使用了Gatsby和包react-load脚本 我的想法是使用外部加载脚本加载投票。 当我加载页面时,脚本被加载,并且可以正常工作。我看到我的投票了 但当我使用更改页面时,脚本似乎总是在这里,但没有触发。 所以我没有看到我的投票结果 为什么??请问如何解决这个问题 <Script url="https://static.apester.com/js/sdk/latest/apester-sdk.js" onCreate={this.handleScriptCrea

我使用了
Gatsby
和包
react-load脚本

我的想法是使用外部加载脚本加载投票。

当我加载页面时,脚本被加载,并且可以正常工作。我看到我的投票了

但当我使用
更改页面时,脚本似乎总是在这里,但没有触发。 所以我没有看到我的投票结果

为什么??请问如何解决这个问题

<Script
      url="https://static.apester.com/js/sdk/latest/apester-sdk.js"
      onCreate={this.handleScriptCreate.bind(this)}
      onError={this.handleScriptError.bind(this)}
      onLoad={this.handleScriptLoad.bind(this)}
    /> 
    <div className="apester-media" data-media-id="5bfe9820478f42ff6380cbe8exxx" height="416"></div>

解决方案是使用
gatsby browser.js

在这个文件中,我必须把脚本再次重新加载

exports.onRouteUpdate = () => {
    if (window.APESTER) {
       window.APESTER.reload();
    } 
}

解释:当我改变路线时,我执行了这个脚本。

用我自己的(本地)脚本怎么做?它位于静态文件夹中,但也只执行一次。我试着用头盔加载它(它可以但不需要全局运行),但这对我也不起作用。通过盖茨比ssr加载:

export const onRenderBody = ({ setPostBodyComponents }) => {
       setPostBodyComponents([
          <script
             src="/main.js"
          />
       ])
}
我已经试着让它在盖茨比浏览器中工作,但也没用

import yourScript from '/static/main.js'
exports.onRouteUpdate = () => yourScript();
如果它包含在
(只有我的索引页,它应该在那里执行)中,它也只在RouteChange之前工作。这里提到了一个解决方案,但它对我不起作用(而且看起来是一个不合适的解决方案):

不幸的是,我不太熟悉
类…扩展React.Component
componentDidMount
以及它如何与盖茨比(props)一起工作

这是代码应始终运行的组件(首页):

const Home = ({ data }) => {
  return (
    <>
      <SEO title="Porfolio" />
      {data.allDatoCmsProject.edges.map(({ node: project }) => (
        <Link to={`${project.slug}`}>
          <Article 
            titleText={project.title}
            heroImage={project.featuredphoto.gatsbyImageData}
          />
        </Link>
      ))}
    </>
  )
}
const Home=({data})=>{
返回(
{data.allDatoCmsProject.edges.map({node:project})=>(
))}
)
}
import yourScript from '/static/main.js'
exports.onRouteUpdate = () => yourScript();
const Home = ({ data }) => {
  return (
    <>
      <SEO title="Porfolio" />
      {data.allDatoCmsProject.edges.map(({ node: project }) => (
        <Link to={`${project.slug}`}>
          <Article 
            titleText={project.title}
            heroImage={project.featuredphoto.gatsbyImageData}
          />
        </Link>
      ))}
    </>
  )
}