React Router 4阻止iframe网址

时间:2017-09-18 20:53:25

标签: reactjs iframe react-router

我有一个反应项目,我有一个横幅库,我使用反应路由器4在不同的客户,年和活动之间导航

<BrowserRouter>
  <div>
    <Switch>
      <Route path="/:client/:year/:campaign/:banner" exact component={bannerPage} />
      <Route path="/:client/:year/:campaign" exact component={campaignPage} />
      <Route path="/:client/:year" exact component={campaignIndex} />
      <Route path="/" exact component={clientIndex} />
    </Switch>
  </div>
</BrowserRouter>

在显示特定横幅的组件上我有一个i帧来渲染实际横幅而没有别的

  render() {
    return(
      <div>
        <iframe src='data/client/year/campaign/banner'
        width="300px"
        height="250px"
        display="initial" >
        </iframe>
      </div>
    )
  }

但是当我尝试渲染横幅时,React Router拦截iframe的src并再次显示index.html页面,没有任何组件,因为路径与任何路径都不匹配

任何帮助将不胜感激!谢谢!

1 个答案:

答案 0 :(得分:0)

我并不完全确定你的意思是&#34;截取iframe的#rc,但是我会假设你在服务器上引用了行为因为我无法看到你描述的内容与客户端代码有什么关系。

一般来说,服务器上React Router的工作方式是使用catch all处理程序来匹配除静态内容之外的所有内容。您可以通过在catch all之前定义静态内容来避免静态内容。

const app = express();
app.use('/static', express.static(__dirname + '/static'));
app.get('*', (req, res) => {
  res.sendFile(__dirname + '/static/index.html')
});
app.listen('8000');

现在,如果您需要在应用程序请求/data/client/year/campaign/banner时提供一些不同的内容,则需要在catch all之前添加一个处理程序。如果没有关于您的服务器设置的更多信息,我不确定它会是什么,但是这样的话:

const app = express();
app.use('/static', express.static(__dirname + '/static'));
app.use('/data', express.static(__dirname + '/data'));
app.get('*', (req, res) => {
  res.sendFile(__dirname + '/static/index.html')
});
app.listen('8000');