javascript - TypeError:无法获取输入文本
问题描述
我在 React 中使用下面的 JS 代码来获取用户名和密码。
当我将用户名的输入类型用作文本时,我得到“TypeError:无法获取”,但如果我将类型切换为电子邮件,则获取工作正常。
这是为什么?我不希望输入类型为电子邮件,因为它会在提交表单时提示我进行其他检查,例如 @ 符号。
我的 JS:
login() {
const userObject = {
username: document.getElementById('inputUsername').value || null,
password: document.getElementById('inputPassword').value || null
};
this.connect('someurl.com', userObject);
}
async connect(url, userObject) {
try {
let response = await fetch((url), {
method: "PUT",
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(userObject)
});
} catch (e) {
console.error(e);
}
}
我的 HTML 输入:
<input type="text" id="inputUsername" />
解决方案
当您使用 React 时,您必须始终将输入的值保存在 State 中,并在 ajax 调用中发送 State 值
class App extends React.Component {
constructor(props) {
super(props)
this.state = {
userName: null,
password: null
}
this.UserNameChange = this.UserNameChange.bind(this);
this.PasswordChange = this.PasswordChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
UserNameChange(event) {
this.setState({
userName: event.target.value
});
}
PasswordChange(event) {
this.setState({
password: event.target.value
});
}
handleSubmit(event) {
alert('UserName: ' + this.state.userName + ' and Password: ' + this.state.password);
event.preventDefault();
}
render() {
return (
<div>
<form onSubmit = {this.handleSubmit}>
<input type = 'text' onChange = {this.UserNameChange} placeholder = 'UserName' / >
<br/>
<input type = 'text' onChange = {this.PasswordChange} placeholder = 'Password' / >
<br/>
<input type = "submit" value = "Submit"/>
</form>
</div>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render( <App/> , rootElement);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id='root' />
推荐阅读
- elasticsearch - 在 ElasticSearch 中比较索引中的文档时检测更改
- c# - 将对象列表序列化为没有父对象名称的 JSON
- java - Load only x items in Firebase Recycler Adapter
- html - 将鼠标悬停在 span 上以获取工具提示 div
- git - Git 重命名是否包含在提交中?
- php - Laravel 雄辩的查询并在 OR 条件下加入
- android - Android 错误“android.app.Application 未实现 dagger.android.HasActivityInjector”
- react-native - AWS 放大记住在 React Native 应用程序中登录的用户
- ada - 使用存储管理器分配内存会导致非纯函数 (RM 13.1(22))
- java - autowire在弹簧芯中的作用是什么?