react-native - 表单使用 web 但不是 iOS,event.target 返回“未定义”
问题描述
我写了一个登录表单,可以在浏览器中使用,但不适用于 iOS 的 Expo Client。
changeHandler方法中的event.target.id和event.target.value在iOS 上返回“未定义”,而在浏览器中返回正确的值。
谁能解释为什么?
class AdminPanel extends Component {
constructor(props){
super(props)
this.state = {
isLoggedIn: false,
username: null,
password: null
}
this.changeHandler = this.changeHandler.bind(this)
this.loginHandler = this.loginHandler.bind(this)
}
changeHandler(event){
let name = event.target.id;
let value = event.target.value;
this.setState({[name]: [value]})
}
loginHandler(event){
if(this.state.isLoggedIn){
this.setState({isLoggedIn: false, username: null})
}else{
if(this.state.username == "adm" && this.state.password == "123"){
this.setState({isLoggedIn: true, password: null})
}else{
alert("Login failed")
}
}
}
render(){
if(this.state.isLoggedIn){
return (
<View>
<Text>Hi {this.state.username}!</Text>
<input type="submit" value="Logout" onClick={this.loginHandler} />
<StatusBar style="auto" />
</View>
)
}else{
return (
<View>
<Text>Welcome to the admin panel.</Text>
<Input id="username" onChange={this.changeHandler} placeholder="Username" />
<Input id="password" onChange={this.changeHandler} placeholder="Password" />
<Button title="Login" onPress={this.loginHandler} />
<StatusBar style="auto" />
</View>
);
}
}
}
解决方案
我通过使用onChangeText而不是onChange解决了这个问题,并将两个包含名称和文本的参数传递给我的新方法inputHandler。
inputHandler(id, text){
this.setState({[id]: [text]})
}
...
<Input name="username" onChangeText={ (text) => { this.inputHandler('username', text) }} placeholder="Username" />
<Input name="password" onChangeText={ (text) => { this.inputHandler('password', text) }} placeholder="Password" secureTextEntry={true} />
我不确定为什么无法从 iOS 访问event.target.name 和 event.target.value,但有些事情告诉我,事件在本机中的工作方式与在 Web 中的工作方式不同。
推荐阅读
- sql-server - 如何从我的本地机器连接到 Mssql 容器?
- android - 无法解析 Json 响应字符串以获取消息:没有崩溃值
- c++ - 动态更改指向结构的指针数组的数据类型
- c# - 如何在 WPF 中使用 DataGrid 填充嵌套数据
- java - 在java中拆分字符串:指定长度的lookbehind
- flutter - How can i change the state of a widget from and external class
- codeigniter - 如何让 Codeigniter 在表格视图中显示所有条目而不限制为 10 行数据?
- xpath - eXist-db - XQuery - Lucene - controlling output in KWIC function with callback parameter
- ruby - 在纯红宝石中将 camelCase 转换为破折号(连字符)
- python - mypy 和 attrs:错误类型检查子类列表