.map()undefined不是React.js中的函数

.map() undefined is not a function in React.js

本文关键字:js 函数 React 不是 undefined map      更新时间:2023-09-26

好吧,我可能错过了这里显而易见的内容,但我得到了一个"Uncaught TypeError:undefined不是函数"。我似乎是.map(),这是问题所在,但我不明白为什么。

var idealist = React.createClass({
loadCommentsFromServer: function() {
    $.ajax({
        url: this.props.url,
        dataType: 'json',
        success: function(data) {
            this.setState({data: data});
        }.bind(this)
    });
},
handleButtonClick: function(input) {
    // do stuff //
},
getInitialState: function() {
    return {data: []};
},
componentWillMount: function() {
    this.loadCommentsFromServer();
    setInterval(this.loadCommentsFromServer, this.props.pollInterval);
},
render: function() {
    var clickFunction = this.handleButtonClick;
    var ideas = this.state.data.map(function(i){
        return <ideabox data={i} onButtonClick={clickFunction} />;
    });
    return (
        <div className="idealist">
            {ideas}
        </div>
        );
}
});
React.renderComponent(
<idealist  url="/json/quotes.php"  pollInterval={2000}/>,
document.getElementById('quoteList')
);

如果我将其更改为var ideas=this.state.data我没有收到任何错误,JSON数据的格式是正确的,有什么问题吗?

这是一个愚蠢的错误,quotes.php没有返回正确格式的JSON数据,所以它不是一个数组。正在调用map()。吸取了什么教训?不要相信别人的代码是有效的!

.map()是一种方法,用于创建一个带有所提供结果的新数组。

以下是相关文档:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

这里可以做的事情是更改对象的.data属性以返回一个数组。由于.map()仅适用于Array类型的对象。

如果这对任何人都有帮助,另一个容易忽略的错误是将变量初始化为空对象,而不是状态中的空数组并调用map()。

例如,在下面声明

const [list, setList] = useState({});

而不是

const [list, setList] = useState([]);

并尝试在对象上调用map()

list.map((item)=>{
    //do something
})

将导致";undefined不是附近的函数。。。list.map(…"组件加载过程中的错误