Javascript 在react路由器重定向上运行jquery脚本

Javascript 在react路由器重定向上运行jquery脚本,javascript,jquery,reactjs,webpack,react-router,Javascript,Jquery,Reactjs,Webpack,React Router,我期待着港口我现有的网站,使用一个主题,以利用反应组件 该主题有很多功能,可以使UI正确呈现(包括几个动画) 主题的js导入了许多其他js库 这意味着我无法编写主题提供的任何UI元素的react版本 但是,实际上元素可以用作“哑组件”,我不需要它们的任何数据绑定功能 我可以在我的public/html文件夹中导入我的js库的依赖项,所以这不是什么大问题 真正的问题是我的主题库(我将称之为scripts.js)没有在每次使用react router重定向时加载 由于react router实际上没

我期待着港口我现有的网站,使用一个主题,以利用反应组件

该主题有很多功能,可以使UI正确呈现(包括几个动画)

主题的js导入了许多其他js库

这意味着我无法编写主题提供的任何UI元素的react版本

但是,实际上元素可以用作“哑组件”,我不需要它们的任何数据绑定功能

我可以在我的
public/html
文件夹中导入我的js库的依赖项,所以这不是什么大问题

真正的问题是我的主题库(我将称之为scripts.js)没有在每次使用
react router
重定向时加载

由于
react router
实际上没有重新加载页面,因此我的
scripts.js
无法知道何时执行其UI功能

讨论如何将
scripts.js
包装到函数中,并在
路由器
级别的每次更新时调用它

由于react router 4没有更新,我决定订阅历史记录。 我是这样做的:

从“历史”导入{createBrowserHistory};
const history=createBrowserHistory();
历史。听(()=>{
log(“url已更改”);
});
导出{history};
现在,我能够知道每次发生路由更改时,我现在所需要的就是实际地将
scripts.js
加载到“load”

我的
scripts.js
非常长,其中一些是专有的,所以我只在这里发布一个片段

mr=(函数(mr、$、窗口、文档){
“严格使用”;
mr=mr |{};
var组件={documentReady:[],DocumentReadyFerred:[],windowLoad:[],windowLoadDeferred:[];
mr.status={documentReadyRan:false,windowLoadPending:false};
$(document).ready(documentReady);
$(窗口)。打开(“加载”,窗口加载);
函数documentReady(上下文){
context=typeof context==typeof undefined?$:context;
components.documentReady.concat(components.DocumentReadyFerred).forEach(函数(组件){
组件(上下文);
});
mr.status.documentReadyRan=true;
if(mr.status.windowLoadPending){
windowLoad(mr.setContext());
}
}
函数windowLoad(上下文){
if(mr.status.documentReadyRan){
mr.status.windowLoadPending=false;
context=typeof context==“对象”?$:context;
components.windowLoad.concat(components.windowLoadDeferred).forEach(函数(组件){
组件(上下文);
});
}否则{
mr.status.windowLoadPending=true;
}
}
mr.setContext=函数(contextSelector){
var上下文=$;
if(typeof contextSelector!==typeof undefined){
返回功能(选择器){
返回$(上下文选择器).find(选择器);
};
}
返回上下文;
};
mr.components=组件;
mr.documentReady=documentReady;
mr.windowLoad=windowLoad;
返回mr;
}(window.mr、jQuery、window、document));
还有一点:

//滚动函数
mr=(函数(mr、$、窗口、文档){
“严格使用”;
scroll先生{};
var raf=window.requestAnimationFrame | |
window.mozRequestAnimationFrame | |
window.webkitRequestAnimationFrame||
window.msRequestAnimationFrame;
scroll.listeners先生=[];
mr.scroll.busy=false;
mr.scroll.y=0;
mr.scroll.x=0;
var documentReady=函数($){
////////////////捕获滚动事件和火灾滚动功能
jQuery(window.off('scroll.mr');
jQuery(window.on('scroll.mr',函数(evt){
if(mr.scroll.busy===false){
mr.scroll.busy=true;
raf(函数(evt){
mr.scroll.update(evt);
});
}
if(evt.stopPropagation){
evt.stopPropagation();
}
});
};
mr.scroll.update=功能(事件){
//遍历所有mr滚动侦听器
var parallax=窗口类型。mr_parallax!==未定义的类型?true:false;
mr.scroll.y=(视差?mr_parallax.mr_getScrollPosition():window.pageYOffset);
mr.scroll.busy=false;
视差{
mr_parallax.mr_parallaxBackground();
}
if(mr.scroll.listeners.length>0){
for(var i=0,l=mr.scroll.listeners.length;i
我不太熟悉这些库从web包编译到浏览器的方式,如果代码块不充分/不必要,那么很抱歉


我的问题是,如何确保每次
react router
页面更改时都加载脚本

您好,这是很久以前的事了,但我想知道您是否解决了它,以及如何解决?不,不幸的是,没有一个解决方案可以解决这个问题。react需要了解状态更新,而jQuery没有这样的限制。因此,在react中运行任意jquery是不可行的