javascript - 现在在表单提交中调用函数
问题描述
我正在学习 React 课程,在这个模块中我正在学习如何将数据插入 Firebase 数据库,但我坚持当前课程,因为我的代码没有在数据库中插入数据,试图调试我发现的问题没有调用“地籍”功能。有人知道为什么它不在数据库中插入数据吗?
我没有收到任何错误,唯一的问题是我在输入字段中插入数据,然后单击按钮,但它没有将数据插入数据库。
import React, { Component } from 'react';
import firebase from 'firebase'
export default class App extends Component {
constructor (props){
super(props);
this.state = {
tokenInput: '',
token: 'Carregando',
nome: '',
idade: '',
};
this.cadastrar = this.cadastrar.bind(this);
// Your web app's Firebase configuration
let firebaseConfig = {
apiKey: "xxxxxx",
authDomain: "xxxxx",
databaseURL: "xxxx",
projectId: "xxxx",
storageBucket: "xxxx",
messagingSenderId: "xxxx",
appId: "xxxx"
};
// Initialize Firebase
if(!firebase.apps.length){
firebase.initializeApp(firebaseConfig)};
// Olheiro
/*
firebase.database().ref('token').on('value', (snapShot) => {
let state = this.state;
state.token = snapShot.val().token;
this.setState(state);
});
*/
firebase.database().ref('token').on('value', (snapshot) => {
let state = this.state;
state.token = snapshot.val();
this.setState(state);
});
firebase.database().ref('usuarios').child(1).on('value', (snapShot) => {
let state = this.state;
state.nome = snapShot.val().nome;
state.idade = snapShot.val().idade;
this.setState(state);
});
}
cadastrar(e){
firebase.database.ref('token').set(this.state.tokenInput);
e.preventDefault();
}
render(){
const { token, nome , idade} = this.state;
return(
<div>
<form onSubmit={this.cadastrar}>
<input type='text' value={this.state.tokenInput}
onChange={(e) => this.setState({tokenInput: e.target.value})} />
<button type='submit'>Cadastrar1</button>
</form>
<h1>Token: {token} </h1>
<h1>Nome: {nome} </h1>
<h1>Idade: {idade} </h1>
</div>
);
}
}
解决方案
cadastrar(e){
firebase.database.ref('token').set(this.state.tokenInput);
e.preventDefault();
}
看起来这个函数没有被调用,但控制台可能在从表单提交重新加载页面之前显示一个 TypeError ,因为database.ref
它不是一个函数。然后代码将在到达该e.preventDefault()
行之前停止执行。为了帮助将来捕获这些错误,我建议将preventDefault
调用放在处理程序的顶部,这样控制台输出就不会丢失。
为了修复 TypeError,我相信您需要将其更改为firebase.database().ref('token')
功能齐全:
cadastrar(e){
e.preventDefault();
firebase.database.ref('token').set(this.state.tokenInput);
}
推荐阅读
- jmeter - Jmeter-我有用户登录一次并在一个线程中多次执行各种事务的场景
- java - 带有 Maven 和 IntelliJ 的 OpenJFX 14:无法运行应用程序
- html - 如何在 5 列网格中居中 3 个项目
- java - 在实现 org.springframework.validation.Validator 时随时访问 Headers
- python - 将包含字符串的 RDD[Row] 转换为 IntegerTypes 的 Dataframe
- javascript - 如何在 Express 中验证模式?
- javascript - Angular Kendo UI:在 masktextbox 中显示 X 而不是文本
- api - 如何使用 API IntelliJ 想法将搜索栏与您自己的代码存储库链接?
- ffmpeg - 暂停 ffmpeg 屏幕截图?
- html - 我们如何浏览网页将维护主登录页面的导航栏