TypeError:无法读取未定义的属性“map”-React
2021-06-26
411
我正在处理一个搜索字段,我想将数据返回给用户,但出现了错误:TypeError:无法读取未定义的属性“map”。我似乎无法找出为什么 map 未定义,
这是我的代码: 代码沙盒
我尝试从 j-fiddle(下面的代码)中获取示例代码并将其转换为功能组件。这是我尝试从 j-fiddle 中操作的代码
class Wrapped extends React.Component {
constructor(props){
super(props)
this.state = {
results: []
}
this.search = this.search.bind(this)
}
search(results){
this.setState({results})
}
render(){
const { results } = this.state
return (
<div>
<Search onSearch={this.search} />
<Result {...this.state} />
</div>
)
}
}
class Search extends React.Component {
constructor(props){
super(props);
this.state = {
searchValue: ''
}
this.handleOnChange = this.handleOnChange.bind(this);
}
handleOnChange(e){
this.setState({
[e.target.name]: e.target.value
}, () => {
setTimeout(() => {
// it can be the result from your API i just harcoded it
const results = ['hello', 'world', 'from', 'SO'].filter(value => value === this.state.searchValue)
this.props.onSearch(results)
}, 1000)
})
}
render(){
return (
<div>
Search: <input name="searchValue" type="text" onChange={this.handleOnChange} />
</div>
)
}
}
const Result = ({results}) => {
return (
<ul>
{results.map(result => <li key={result}>{result}</li>)}
</ul>
)
}
ReactDOM.render(
<Wrapped/>,
document.getElementById('container')
);
1个回答
我检查了您的代码,发现
Wrapped.js
中存在以下错误:
<Results {...results} />
由于
results
声明如下:
const [results, setResults] = useState([]);
{...results
会以错误的方式将内容数组分散到属性中,我建议您阅读
此处
中有关
Spread 运算符
的信息。
为了修复您的错误,您可以执行以下解决方案之一:
简单解决方案
<Results results={results} />
Spread 运算符解决方案
...
const resultsProps = {
results,
}
...
return (
<>
<SearchComp onSearch={search} />
<Results {...resultsProps} />
</>
);
...
希望这对您有用,请告诉我,并记得阅读有关
Spread Operator
的信息,它是 .JS 中一个非常有用的函数。
rigojr
2021-06-26