gpt4 book ai didi

ruby-on-rails - React Router 4 触发整页重新加载

转载 作者:行者123 更新时间:2023-12-03 13:39:03 25 4
gpt4 key购买 nike

React Router 4 运行在 Rails 和 React 之上,但遵循 <Link />元素在我的服务器中触发 GET 请求,并在我的开发环境中触发整页重新加载。

以下是我当前运行的版本:

"@rails/webpacker": "^3.0.2",
"react": "^16.2.0",
"react-dom": "^16.2.0",
"react-router-dom": "^4.2.2",
"clean-webpack-plugin": "^0.1.17",
"webpack-dev-server": "^2.9.5",
"webpack-merge": "^4.1.1"

我正在使用 foreman gem,它在 localhost:5000 上运行 Rails 服务器和 webpack-dev-server。

我尝试过的:

  • 添加historyApiFallback到我的 webpack-dev-server CLI
  • 使用 <Link /><NavLink />
  • 添加尾随 /到我的链接; <Link path='/sign-in/' component={Register} />
  • 渲染 <App />在最高级别组件中,并添加 <BrowserRouter />以及所有路由/交换到 <App />
  • 我尝试过使用 exact path , strict path ,只是path

我很好奇这是否与我的 webpack 配置有关......如果需要的话我也可以发布它。看起来这一切都设置正确,但还有其他奇怪的事情正在发生。

什么有效:- 我可以在组件之间切换,即使我的 Rails 路线位于 routes.rb有一个包罗万象的:get '*path', to: 'pages#index'

这是我的最高级别组件,index.js

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter as Router } from 'react-router-dom';

import Main from '../react/src/components/Main';

document.addEventListener('DOMContentLoaded', () => {
ReactDOM.render(
<Router>
<Main />
</Router>,
document.getElementById('app')
);
});

这是ma​​in.js:

import React from 'react';
import { Route, Switch, } from 'react-router-dom';
import Dashboard from './Dashboard';
import FormContainer from './FormContainer';

const Main = props => {
return (
<main>
<Switch>
<Route path="/sign-in/" component={FormContainer} />
<Route path="/" component={Dashboard} />
</Switch>
</main>
);
};

export default Main;

呈现的组件示例,Dashboard.js:

import React from 'react';
import { Link } from 'react-router-dom';

const Dashboard = props => {
return (
<div>
<h2>Dashboard</h2>
<Link to="/sign-in/">Sign In</Link>
</div>
);
};

export default Dashboard;

负责我的根页面的空 Controller :

class PagesController < ApplicationController
end

还有我的routes.rb:

Rails.application.routes.draw do
root "pages#index"
get '*path', to: 'pages#index'
end

我已经阅读了多个教程,并且相当确定其结构正确...我想我主要是在寻找有关可能干扰 React Router 的任何提示,外部 库的,即 webpack,在本地主机上运行等

最佳答案

我能够通过重命名标签 <main> 来解决此问题那是我的application.html.erb<%= yield %>标签被包裹在...我不太明白为什么包裹 <%= yield %>在一个专门称为 <main> 的标签中导致页面重新加载/禁用客户端渲染,但就我而言,它做到了!

关于ruby-on-rails - React Router 4 触发整页重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com