【发布时间】:2020-08-10 21:01:37
【问题描述】:
您好,我想了解为什么此特定代码有效而我之前的代码无效。
我已经提供了下面两个sn-ps:
工作代码:
handleInputChange = (e) => {
let { value } = e.target;
this.setState(state => { return ({searchField : value}) }, () => console.log("new state is ", this.state.searchField))
}
不工作的代码:
我在这里得到的错误是cannot read property value of null.
handleInputChange = (e) => {
this.setState(state => { return ({searchField : e.target.value}) }, () => console.log("new state is ", this.state.searchField))
}
这是两者都通用的渲染方法:
render() {
let { monsters, searchField } = this.state;
const filteredMonsters = monsters.filter((monster) => {
return monster.name.toLowerCase().includes(searchField.toLowerCase());
})
return (
<div className="App">
<input type="search" placeholder="Monster Name" onChange={this.handleInputChange}/>
<CardList monsters={filteredMonsters}/>
</div>
);
有人能解释一下为什么解构语法有效吗?
谢谢!
【问题讨论】:
-
您正在传递一个函数,该函数将在未来某个时间访问
e.target,而工作的 sn-p 在事件发生时提取值。显然,除非立即访问,否则不能保证该事件提供.target。 -
谢谢,您能否解释一下为什么 this.setState({searchField : e.target.value}) 有效,即使 this.setState 是异步的,这仍然有效。
-
它是异步的,但您传递的是一个值,即
e.target.value的当前值。在你的非工作代码中,你传递了一个 function,只有当它实际运行时,React 才会尝试访问该值,但此时e指向的对象已经被清除。基本演示:jsfiddle.net/khrismuc/qs316vkg
标签: javascript reactjs react-redux