जब मैं JSON डेटा (या तो फ़ाइल या सर्वर से) प्रदर्शित करने की कोशिश कर रहा हूँ, तो मैं प्रतिक्रिया के साथ काम कर रहा हूँ और इस त्रुटि को रोक नहीं सकता।
Uncaught TypeError: this.props.data.map is not a function
मैंने देखा है:
रिएक्ट कोड "टाइप टाइप: थ्रू: इस.प्रॉप्सडेटा.मैप एक फंक्शन नहीं है"
React.js इस। Props.data.map () एक फ़ंक्शन नहीं है
इनमें से किसी ने भी समस्या को ठीक करने में मेरी मदद नहीं की। मेरे पेज लोड होने के बाद, मैं सत्यापित कर सकता हूं कि यह.data.props अपरिभाषित नहीं है (और इसमें JSON ऑब्जेक्ट के बराबर मूल्य है - के साथ कॉल कर सकते हैं window.foo
), इसलिए ऐसा लगता है कि यह समय में लोड नहीं हो रहा है जब इसे कहा जाता है ConversationList। मैं यह कैसे सुनिश्चित करूं कि map
विधि JSON डेटा पर काम कर रही है न कि एक undefined
चर पर?
var converter = new Showdown.converter();
var Conversation = React.createClass({
render: function() {
var rawMarkup = converter.makeHtml(this.props.children.toString());
return (
<div className="conversation panel panel-default">
<div className="panel-heading">
<h3 className="panel-title">
{this.props.id}
{this.props.last_message_snippet}
{this.props.other_user_id}
</h3>
</div>
<div className="panel-body">
<span dangerouslySetInnerHTML={{__html: rawMarkup}} />
</div>
</div>
);
}
});
var ConversationList = React.createClass({
render: function() {
window.foo = this.props.data;
var conversationNodes = this.props.data.map(function(conversation, index) {
return (
<Conversation id={conversation.id} key={index}>
last_message_snippet={conversation.last_message_snippet}
other_user_id={conversation.other_user_id}
</Conversation>
);
});
return (
<div className="conversationList">
{conversationNodes}
</div>
);
}
});
var ConversationBox = React.createClass({
loadConversationsFromServer: function() {
return $.ajax({
url: this.props.url,
dataType: 'json',
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
getInitialState: function() {
return {data: []};
},
componentDidMount: function() {
this.loadConversationsFromServer();
setInterval(this.loadConversationsFromServer, this.props.pollInterval);
},
render: function() {
return (
<div className="conversationBox">
<h1>Conversations</h1>
<ConversationList data={this.state.data} />
</div>
);
}
});
$(document).on("page:change", function() {
var $content = $("#content");
if ($content.length > 0) {
React.render(
<ConversationBox url="/conversations.json" pollInterval={20000} />,
document.getElementById('content')
);
}
})
संपादित करें: नमूना वार्तालाप जोड़ रहे हैं
नोट - कॉलिंग में this.props.data.conversations
भी त्रुटि होती है:
var conversationNodes = this.props.data.conversations.map...
निम्न त्रुटि देता है:
अनक्रेड टाइप टाइप: अपरिभाषित की संपत्ति 'नक्शा' नहीं पढ़ सकता है
यहाँ वार्तालाप है। संदेश:
{"user_has_unread_messages":false,"unread_messages_count":0,"conversations":[{"id":18768,"last_message_snippet":"Lorem ipsum","other_user_id":10193}]}