【问题标题】:React Router Causing page redirect due to confict with site Javascript由于与站点 Javascript 冲突,React Router 导致页面重定向
【发布时间】:2021-09-07 13:47:37
【问题描述】:

我有一个基于 React.js 的小部件,已嵌入到 shopify 网站。它适用于大多数网站。

对于一个站点,ajax-cart.js.liquid 代码导致 react 路由器出现问题,页面 url 发生变化,托管小部件的页面加载该 url - 导致 404。

如何隔离 React 应用程序和路由器功能,使其不被页面 js 破坏或接管?

在这里您可以看到它正常工作。单击右下角的 P,然后单击加入。 https://www.puctto.me/collections/all

在这里你可以看到它不起作用。单击 P。 url 栏发生变化,页面导航。 https://shoezie.com.au/

我正在像这样加载 ReactRouter:

import React from "react";
import {
  Switch,
  Route,
  Redirect
} from "react-router-dom";
import { MemoryRouter } from 'react-router'
import axios from "axios";

export default class App extends React.Component {
 //app code
}

然后在我的 FooterGuest 组件中,我使用了来自 react-router 的链接

import React from "react";
import {
  // BrowserRouter as Router,
  // Switch,
  // Route,
  Link
} from "react-router-dom";

export function FooterGuest(){
  return (
    <div className="widget-footer widget-footer--login ">
      <h3 className="widget-footer-header ">
        Sign in to upload your own photo
      </h3>
      <div className="widget-footer__register-bar">
        
        <Link to="/signin" className="ui inverted button" >Sign In</Link>
        <Link to="/join" className="ui inverted button" >Join</Link>
      </div>
    </div>
  )
}

【问题讨论】:

  • 你使用 import {Link} from "react-router-dom"; ?
  • 是的。这是某种原因吗?
  • 更新了更多细节

标签: reactjs react-router


【解决方案1】:

你可以尝试添加这个来防止重定向:

export function FooterGuest(){

 const stopPropagation = (e)=>{
        e.stopPropagation()
    }
  return (
    <div className="widget-footer widget-footer--login ">
      <h3 className="widget-footer-header ">
        Sign in to upload your own photo
      </h3>
      <div className="widget-footer__register-bar">
        
        <Link to="/signin" className="ui inverted button" onClick={stopPropagation} >Sign In</Link>
        <Link to="/join" className="ui inverted button" onClick={stopPropagation} >Join</Link>
      </div>
    </div>
  )
}

【讨论】:

  • 好的,谢谢。我认为这是路由器处理的问题,但这是一种双重检查/强制执行的方法吗?
  • 好吧,成功了吗?是的,它确实如此,但我认为网站上还有其他一些 js 确实覆盖了它。使用那个 stopPropagation() 代码不应该运行。
  • 是的,对于这两个链接。接下来我需要将其添加到所有其他人中。感谢您提供此解决方法。我仍然想了解发生了什么,以及如何确保在这些情况下 react 路由器更加健壮。
  • 问题不是因为反应路由器,当您单击链接时,其他脚本会控制我认为它的页面转换。我认为最好的是其他脚本将是仅在链接具有类或其他内容时才会触发的更改。
猜你喜欢
  • 2021-01-04
  • 2016-08-29
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2017-04-13
  • 2022-12-11
相关资源
最近更新 更多