javascript – ReactJS与React路由器 – Chrome上的奇怪路由行为
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – ReactJS与React路由器 – Chrome上的奇怪路由行为,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1857字,纯文字阅读大概需要3分钟。
内容图文
这有点奇怪,我想深究它.
我有一个页面,用户输入他们的电子邮件地址并单击按钮,然后我显示“您已注册!”消息 – 简单.
为此,我有两条路线.主要路线和“注册”路线.
<Route name="app" path="/" handler={Main}>
<Route name="signed-up" path="signed-up" handler={SignedUp} />
<DefaultRoute handler={Signup} />
</Route>
在第一页上,当用户输入电子邮件地址并单击按钮时,我会激活POST AJAX以在我的后端数据库上保存电子邮件地址(使用Axios软件包),当它完成后,我将转到“已注册”路由.
handleSubmit() {
var router = this.context.router;
var email = this.refs.email.getDOMNode().value;
this.refs.email.getDOMNode().value = '';
helpers.postSignupEmail(email).then((response) => {
// then display the signed up page
router.transitionTo("signed-up");
});
}
现在,当我第一次输入我的页面的URL时
http://localhost:1338
浏览器(Chrome,FireFox,Safari)似乎都将URL更改为
http://localhost:1338/#/
很公平.在FireFox中,我输入一封电子邮件,然后点击提交按钮,一切正常并带我去
http://localhost:1338/#/signed-up
但是,现在在Chrome上,当我点击提交时,它不会更改路线.实际上,在开发者控制台上,我看到了一个错误.
首先,为什么“帖子”请求被取消了?其次,当发生这种情况时,Chrome无响应.所以我刷新了页面,然后我得到了Chrome的“海军死亡屏幕”.
现在,有趣的是,如果我将初始URL更改为
http://localhost:1338/?#/
(在哈希前插入问号),然后Chrome上的工作正常.所以,它让我想知道它与我的路径路径或参数有关.
有任何想法吗?
解决方法:
几个小时前刚刚遇到这个问题.
所以你的组件中有类似的东西(es6语法):
render() {
return (
<form onSubmit={ this.submit.bind(this) }>
{ /* inputs stuff here */ }
</form>
);
}
submit() {
// Ajax request here
}
问题是Chrome尝试发送获取请求,并附加一个?到你当前的URL,因为你的表单标签中没有任何action =“/ formsubmit”,默认情况下它认为它是一个方法=“get”.因此,Chrome会使用当前网址(例如myapp.com/#/)并尝试通过myapp.com/?#/发送表单,这是一个新网址.
为了防止这种情况,只需在提交表单时添加preventDefault即可
submit(e) {
e.preventDefault()
// Ajax request here
}
内容总结
以上是互联网集市为您收集整理的javascript – ReactJS与React路由器 – Chrome上的奇怪路由行为全部内容,希望文章能够帮你解决javascript – ReactJS与React路由器 – Chrome上的奇怪路由行为所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。