【发布时间】:2018-02-10 14:36:06
【问题描述】:
在我的代码中,我在 onSubmit 事件中提到了 preventDefault 方法,因此当用户在表单中输入数据时我的页面没有重新加载...
你能告诉我有什么方法可以将数据导出到 firebase 并自动重新加载我的页面!
代码如下:
import React, { Component } from 'react';
const firebase = require('firebase');
const uuid = require('uuid');
var config = {
apiKey: "AIzaSyAtpOSiCqFy43ZTE-7CJdcHrIGNN1GrsSk",
authDomain: "electronic-health-record-a795c.firebaseapp.com",
databaseURL: "https://electronic-health-record-a795c.firebaseio.com",
projectId: "electronic-health-record-a795c",
storageBucket: "electronic-health-record-a795c.appspot.com",
messagingSenderId: "545743770560"
};
firebase.initializeApp(config);
class Usurvey extends Component {
constructor(props) {
super(props);
this.state = {
uid: uuid.v1(),
firstName: '',
lastName: '',
};
this.submitData = this.submitData.bind(this);
this.inputData = this.inputData.bind(this);
}
componentDidMount() {
firebase
.database()
.ref(`Newdata/${this.state.uid}`)
.on('value', snap => console.log('from db', snap.val()));
}
submitData(event) {
event.preventDefault();
firebase
.database()
.ref(`Newdata/${this.state.uid}`)
.set({
firstName: this.state.firstName,
lastName: this.state.lastName,
})
.catch(error => console.log(error));
}
inputData(event) {
const firstName = this.refs.name1.value;
const lastName = this.refs.name2.value;
this.setState({ firstName, lastName });
}
render() {
return (
<div>
<form onSubmit={this.submitData}>
<input type="text" onChange={this.inputData} ref="name1" />
<input type="text" onChange={this.inputData} ref="name2" />
<input type="submit" />Submit
</form>
</div>
);
}
}
export default Usurvey;
【问题讨论】:
-
一开始为什么要重新加载页面,SPA的整个概念就是在不重新加载页面的情况下做事。
-
那么用户如何输入详细信息并再次访问该页面?
-
您应该在提交时重置您的表单,这样用户可以根据需要输入更多信息。此外,您使用的 refs 方法也不是更改表单的最佳方法。你应该更新你的状态,但不是这样。
-
看看我的回答。
-
是的,它完全有效。谢谢你们俩。
标签: forms reactjs firebase input