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>
))}
</>
)
}