如何使Meteor React内联svg元素点击链接到页面而不刷新整个页面
How to make Meteor React inline svg element click link to page without refresh whole page
我需要一些指导。第一次来这里,所以可能我使用的一些"术语"是不寻常的,请原谅我。
我正在努力实现什么标题说在JSX(使用流星平台)。目前,如果我在svg中使用xlinkHref,当我单击元素时,它将打开链接,但导致刷新整个页面。而在svg之外(使用href),它将打开链接而不刷新整个页面。代码示例:
import React, { Component } from 'react';
export default class App extends Component {
render() {
return (
<div>
<svg>
<a xlinkHref="/nextpage"> //clicking this will refresh whole page
<circle cx="50" cy="50" r="40" fill="red" />
</a>
<circle cx="150" cy="50" r="40" fill="yellow" />
</svg>
<a href="/nextpage">Click to Next Page</a> //clicking this will not refresh
</div>
)
}
请注意,如果我将"a"标签包装在svg标签之外,它肯定会工作,但我只需要红色圆圈是可点击的。
我一直在考虑将圆圈元素分解成单独的svg,然后用"a"标签包装,但让我说我无法做到这一点,我怎么能仍然点击svg元素打开链接而不刷新整个页面?
编辑:修正了一些代码错别字
你可以在你的圆圈上添加onclick事件处理程序。
export default class App extends Component {
onCircleClick(event) {
event.preventDefault();
console.log('Inside on circle click');
window.location='/nextpage';
}
render() {
return (
<div>
<h1> Testing svg tag </h1>
<svg>
<circle onClick= {this.onCircleClick} cx="50" cy="50" r="40" fill="red"/>
<circle onClick= {this.onCircleClick} cx="150" cy="50" r="40" fill="yellow" />
</svg>
</div>
);
}
}
与反应路由器
通过使用来自React Router的browserHistory,你将能够打开链接而不刷新整个页面。
import React, { Component } from 'react';
import { browserHistory } from 'react-router';
export default class App extends Component {
handleClick(link) {
browserHistory.push(link);
}
render() {
return (
<div>
<svg>
<a onClick={this.handleClick.bind(null, "/nextpage")}>
<circle cx="50" cy="50" r="40" fill="red" />
</a>
</svg>
</div>
)
}
}
browserHistory在可用时使用HTML5历史API,否则退回到完全刷新。browserHistory需要在服务器端进行额外的配置来提供url,但它通常是现代网页的首选解决方案。
更多关于React Router的API:https://github.com/ReactTraining/react-router/blob/master/docs/API.md browserhistory
与history.pushState ()
如果你不能使用React Router,你仍然可以使用HTML5的API pushstate来改变路由:https://developer.mozilla.org/en-US/docs/Web/API/History_API
history.pushState(name, title, "nextpage");
注意历史记录与旧浏览器不兼容:http://caniuse.com/#search=history
与一个路由器流星
应该能够使用history.pushState()。如果没有,路由器就应该像React router那样有一个等价的pushState。
- 信息没有'点击AngularJS中的链接后不会刷新.I'我得到了{{value}},但没有得到数据
- 提交链接时不刷新,也不使用ajax
- 如何在页面刷新时保持选定/活动的HTML链接颜色
- 锚链接是指在浏览器刷新、后退和前进时不起作用的页面部分
- 单击具有实际 URL 的链接时刷新
- 每次刷新页面时随机链接
- Jquery toggleClass 在单击链接或刷新页面后丢失类
- 从数据库中获取电子邮件值并发送(PHP电子邮件)/刷新页面,而无需更改网站链接
- jQuery动态内容链接通过php从SQL数据库加载URL,但在刷新时不会加载
- AJAX 分页每隔一个链接刷新页面
- Rails 应用程序 - jQuery Document.ready在单击链接时不调用,但在新选项卡中打开或刷新时工作
- 是否可以使用Javascript在页面刷新时随机生成预先确定的链接颜色和悬停颜色
- 返回promise的链接函数;刷新超时后无法解析
- 单击链接不会刷新内容
- 如何在页面刷新后链接获取焦点
- 在AngularJS中单击链接时阻止页面刷新
- 如果页面刷新,则显示模态,但如果后面有链接,则不显示模态
- 在内部页面链接上强制刷新页面
- 如何在刷新页面后检查超链接状态
- 如何判断一个Angularjs页面是通过刷新加载的还是通过链接导航的