- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能非常简单,甚至简单化,但是...我有一个使用 create-react-app
创建的 React 单页应用程序,一个非常简单的应用程序,只有几条路线。
import React from 'react';
import { BrowserRouter, Switch, Route, Link } from 'react-router-dom';
import ArticleShow from './components/ArticleShow';
import Homepage from './components/Homepage';
export default class App extends React.Component {
render() {
return (
<BrowserRouter>
<section className="Header">
<div className="container-fluid">
<div className="row">
<div className="col-4">
<Link to="/" target="_self">
<span className="title">
<span className="title-feathers">Feathers</span>
<span className="title-4u">4U</span>
</span>
</Link>
</div>
<div className="col-2 align-self-center" style={{ textAlign: "center" }}>
<a href="https://feathersjs.com/" target="_new">
FeathersJS website
</a>
</div>
<div className="col-2 align-self-center" style={{ textAlign: "center" }}>
<Link to="/article/emerald-realm" target="_self">
Emerald Realm
</Link>
</div>
<div className="col-2 align-self-center" style={{ textAlign: "center" }}>
<Link to="/article/ed-de-almeida" target="_self">
Ed de Almeida
</Link>
</div>
<div className="col-2 align-self-center" style={{ textAlign: "center" }}>
<Link to="/article/services">
Services
</Link>
</div>
</div>
</div>
</section>
<section className="Contents">
<div className="container-fluid">
<div className="row">
<div className="col-3">
<div className="card">
<div className="card-header">
Articles
</div>
<div className="card-body">
list
</div>
</div>
</div>
<div className="col-7">
<div className="Article">
<Switch>
<Route exact path="/" component={Homepage} />
<Route path="/article/:file" component={ArticleShow} />
</Switch>
</div>
</div>
<div className="col-2">
<div className="card">
<div className="card-header">
Other sites
</div>
<div className="card-body">
list
</div>
</div>
<div className="card">
<div className="card-header">
Sponsors
</div>
<div className="card-body">
list
</div>
</div>
</div>
</div>
</div>
</section>
<section className="Footer"></section>
</BrowserRouter>
)
}
}
当我导航到 http://myserver.com
时然后单击顶部菜单中的链接之一,输入“Ed de Almeida”,其 URL 为 /article/ed-de-almeida
它正确选择了 markdown 文件 ed-de-almeida.md
在某个目录中,将其转换为 HTML 并使用 ArticleShow
将其显示在页面的中央时代成分。这工作正常。
但是当我直接访问http://myserver.com/article/ed-de-almeida
时或者当页面正确在此 route 时刷新页面,我收到一条错误消息:
entry not found: /article/ed-de-almeida
.我错过了什么?因为我确信我在这里遗漏了一些东西!
编辑
ArticleShow.js
import React from 'react';
const showdown = require('showdown');
const converter = new showdown.Converter();
export default class ArticleShow extends React.Component {
state = {
text: { __html: "<div></div>" }
}
componentWillMount() {
let articleURL = '/articles/' + this.props.match.params.file + '.md';
window.fetch(articleURL)
.then(res => res.text())
.then(txt => converter.makeHtml(txt))
.then(html => this.setState({
text: { __html: html }
}))
}
render() {
return(
<div dangerouslySetInnerHTML={this.state.text}></div>
)
}
}
最佳答案
TL;DR:您必须将托管 SPA 的网络服务器配置为始终为您的 index.html
提供服务,无论请求的路径如何。
当您转到http://myserver.com时,默认页面由您的网络服务器提供,通常可以在 http://myserver.com/index.html
上获得相同的页面。当它被提供时,你的 JavaScript 被解析并运行,当你转到另一个路由时,它不会重新加载页面(因此单页应用程序),但会更改 url/搜索字段中的 url在您的浏览器中。这样就可以了。
现在,当您直接进入子路由时,例如 http://myserver.com/article/ed-de-almeida
,使用默认的 Web 服务器配置,它将尝试提供该页面http://myserver.com//article/ed-de-almeida/index.html
。这不是您想要的,因为您拥有的唯一真实页面位于 http://myserver.com/index.html
。因此,您必须配置网络服务器,为客户端请求的每个路径提供位于 index.html
的页面,并让 SPA 读取路由并显示正确的组件。
我将为您提供 2 个非常常见的网络服务器的 2 个示例:Apache HTTPd 和 nginx:
对于 Apache HTTPd:
<VirtualHost *:80>
ServerName mydomainname.tld
DirectoryIndex index.html
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Location /myreactapp >
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . /mySPA/index.html [L]
</Location>
</VirtualHost>
或者对于 nginx:
server {
server_name mydomainname.tld;
index index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /usr/share/nginx/html;
location /mySPA {
try_files $uri $uri/ /mySPA/index.html;
}
}
关于javascript - react : clicked link versus direct link,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57477734/
我通常从以下位置获取代码:https://www.w3schools.com .这个代码还有一个 Accordion ; 但是,当我使用链接 -> 到 Accordion 时, Accordion 不
我见过的所有 JNI 指南(例如 JNI runtime linking )都建议我将 JNI 库链接到 libjvm.so: $ gcc -I${JAVA_HOME}/include -c -o t
实现以下目标的正确 URL 格式是什么: 使用 Universal Link 在 iOS 上的另一个应用程序中打开 Google map 应用程序。 根据两个坐标设置目的地:纬度和经度,并让用户选择交
我已经查看了 Microsoft 的 MSDN 和整个网络,但我仍然无法很好地了解它是什么。 这是否意味着已完成的程序在执行期间的不同时间加载 DLL,而不是在启动时一次性加载所有 DLL? 我完全偏
我有一个看起来像这样的 css: .browse-link A:link { color: #F6CA4C; text-decoration: none; } .browse-link
当我点击“产品”链接时,它突然指向#link。我怎样才能使它的外观看起来像滚动然后转到产品?请帮帮我。 vStudy function big(x){
我想在保存之前更改从输入字段中获取的值。 params[:link]['url'] = "www.facebook.com/redbull" 现在我只想将“redbull”放入数据库。以下代码失败,因
我正在使用链表编写程序(真是一场噩梦)。 无论如何,该程序的目的是输入 8 个字符,然后让程序将字符打印回给您,并以相反的顺序打印回字符,当然是使用链表。 到目前为止我已经明白了。它有很多错误(我认为
基本上,我删除了 anchor 按钮,因此链接窗口中不应该有指向 anchor 选项的链接。 有什么方法可以删除该下拉选项 ? 最佳答案 想通了 if ( dialogName == 'link' )
我的本地(和远程)SQL SERVER 2005 管理员都声称“允许链接服务器是一个安全问题”并禁止在此处使用它们。 (哈?) 无论如何,有没有办法在没有链接服务器的情况下做类似的事情? SELE
如果我有: linkedlist1= 1,2,3,4; 和 linkedlist2= 5,6,7; 如果我调用: linkedlist2.set(0,9999) 它会更改为 linkedlist2 =
首先,如果这个问题看起来很愚蠢,我很抱歉,但我仍在学习 React 和 html。所以问题是我的 react 代码中有一个按钮标签,它为我提供了一些关于进入我提供的特定链接的逻辑。我的 Button.
我将制作一个文本 block ,这样如果您单击一个单词,它就会被词汇替代品所替换。 例如“fearful-of-cats”是“ailurophobic”的词汇替代品,因为如果您在任何文本中将后者替换为
我有以下代码 Can you click me? 目标是我可以点击“你能点击我吗”框并转到 google 并在包含 div 的任何其他地方
这是一个案例: 默认情况下,如果我点击#2、#3、#4、#5,我将被重定向到#1。 如果我想在没有 #1 激活的情况下点击输入,我该如何修复 CSS? 提前
有没有什么快速的方法可以使 :visited 链接的颜色与链接本身的颜色相同? 例如: * {color:black} a:link {color:blue} a:visited {color:inh
我读到从 iOS 9 开始,引入了通用链接。请解释深层链接和通用链接之间的区别。我的目标是,一个链接将通过邮件发送给客户。让邮件说有一个项目 A 的报价和一个链接。单击链接时 如果安装了该应用程序,则
因此我们需要对 CSS anchor 伪类使用以下顺序 a:link { color: red } a:visited { color: blue } a:hover { color
我组件的当前路径是http://localhost:3000/dashboard/questionnaire/5bf79ff4c45a150015cef7a9在这个组件里面有 Financials 如
我 rsync 目录“Promotion”包含两台具有不同目录结构的机器之间的绝对符号链接(symbolic link)。因此绝对符号链接(symbolic link)在两台机器上都不起作用。为了使它
我是一名优秀的程序员,十分优秀!