"यह" मानचित्र फ़ंक्शन रिएक्टज के अंदर अपरिभाषित है


101

मैं मेन्यू घटक लिखकर, रिएक्ट्ज के साथ काम कर रहा हूं।

"use strict";

var React = require("react");
var Menus = React.createClass({

    item_url: function (item,categories,articles) {
        console.log('afdasfasfasdfasdf');
        var url='XXX';
        if (item.type == 1) {
            url = item.categoryId == null ? 'javascript:void(0)' : path('buex_portal_browse_category', {slug: categories[item.categoryId].slug});
        } else if (item.type == 2) {
            url = item.articleId == null ? 'javascript:void(0)' : path('buex_portal_view_article', {slug: articles[item.articleId].slug, id: item.articleId});
        } else {
            url = item.url;
        }
        return url;
    },

    render: function () {
     //   console.log(this.props.menus);  // return correctly
            var menuElements = this.props.menus.map(function (item1) { // return fault : 'cannot read property 'props' of undefined '
            return (
                <div>
                    <li>
                        <a href={this.item_url(item1, this.props.categories, this.props.articles )}>{item1.name} // the same fault above
                            <i class="glyphicon glyphicon-chevron-right pull-right"></i>
                        </a>
                        <div class="sub-menu">
                            <div>
                            {item1._children.map(function (item2) {
                                return (
                                    <div>
                                        <h4>
                                            <a href={this.item_url(item2, this.props.categories, this.props.articles)}>{ item2.name }</a>
                                        </h4>
                                        <ul>
                                            {item2._children.map(function (item3) {
                                                return ( 
                                                    <div><li><a href={this.item_url(item3, this.props.categories, this.props.articles) }>{ item3.name }</a></li></div>
                                                );
                                            })}                   
                                        </ul>
                                    </div>
                                );
                            })}
                            </div>
                        </div>
                    </li>
                </div>
            );
        });

        return (
            <div class="menu">
                <ul class="nav nav-tabs nav-stacked">
                    {menuElements}
                </ul>
            </div>
        );
    }
});

जब भी मैं मानचित्र फ़ंक्शन के अंदर 'इस' का उपयोग करता हूं तो यह अपरिभाषित होता है, लेकिन इसके बाहर कोई समस्या नहीं है।

त्रुटि:

"अपरिभाषित की संपत्ति 'सहारा' नहीं पढ़ सकता है"

कोई भी मेरी मदद करो! : ((


जवाबों:


308

Array.prototype.map()thisमैपिंग फ़ंक्शन में जो संदर्भित करता है उसे सेट करने के लिए दूसरा तर्क लेता है , इसलिए thisवर्तमान संदर्भ को संरक्षित करने के लिए दूसरे तर्क के रूप में पास करें :

someList.map(function(item) {
  ...
}, this)

वैकल्पिक रूप से, आप वर्तमान संदर्भ को स्वचालित रूप से संरक्षित करने के लिए ES6 तीर फ़ंक्शन का उपयोग कर सकते हैं this:

someList.map((item) => {
  ...
})

एक बार जब आप इसका दूसरा तर्क पारित करते हैं, तो क्या इसका मतलब यह है कि यह वैश्विक वस्तु पर फिर से असर डालता है और यदि हाँ, तो ऐसा क्यों है?
यूजेन सनिक

23
हम्म, किसी कारण से मैं thisटाइपस्क्रिप्ट के साथ एक तीर फ़ंक्शन का उपयोग करते समय भी बाध्य नहीं देख रहा हूं ।
लुकास

1
मेरे पास प्रतिक्रिया का उपयोग करते हुए लुकास के समान व्यवहार है। पुराने जमाने की फंक्शन सिंटेक्स मेरे लिए काम करती है। कितना अजीब।
मूनबूट्स89
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.