नमस्ते मैं देशी प्रतिक्रिया में एक कैलेंडर घटक को लागू करने की कोशिश कर रहा था और यहाँ नीचे कोड है।

function generateCalendar(type = 'en') {
    var [etYear, etMonth, etDate] = Ethiopic.toEthiopian(
      state.activeDate.getFullYear(),
      state.activeDate.getMonth() + 1,
      state.activeDate.getDate(),
    );
    console.log('Month: ', etMonth);

    var enYear = state.activeDate.getFullYear();
    var enMonth = state.activeDate.getMonth();

    var matrix = [];

    if (type == 'en') {
      matrix = [];
      var firstDay = new Date(enYear, enMonth, 1).getDay();
      var maxDays = enCalendar.en_days[enMonth];
      if (enMonth == 1) {
        if ((enYear % 4 == 0 && enYear % 100 != 0) || enYear % 400 == 0) {
          maxDays += 1;
        }
      }

      matrix[0] = enCalendar.en_weekDays;

      var counter = 1;
      for (var row = 1; row < 7; row++) {
        matrix[row] = [];
        for (var col = 0; col < 7; col++) {
          matrix[row][col] = -1;
          if (row == 1 && col >= firstDay) {
            matrix[row][col] = counter++;
          } else if (row > 1 && counter <= maxDays) {
            matrix[row][col] = counter++;
          }
        }
      }
    } else if (type == 'et') {
      matrix = [];
      var startDayOfYear = Ethiopic.startDayOfEthiopian(etYear);

      // var firstDay = startOfYear + (30 % startDayOfYear);
      var firstDayOfYear = new Date(enYear, 8, startDayOfYear).getDay();
      var firstDay =
        (etMonth - 1) * 2 + firstDayOfYear > 7
          ? ((etMonth - 1) * 2 + firstDayOfYear) % 7
          : (etMonth - 1) * 2 + firstDayOfYear;
      var maxDays = etCalendar.et_days[etMonth - 1];
      console.log(maxDays);
      if (etMonth == 13) {
        if (etYear % 4 == 3) {
          maxDays += 1;
        }
      }

      matrix[0] = etCalendar.et_weekDays;

      var counter = 1;
      for (var row = 1; row < 7; row++) {
        matrix[row] = [];
        for (var col = 0; col < 7; col++) {
          matrix[row][col] = -1;
          if (row == 1 && col >= firstDay) {
            matrix[row][col] = counter++;
          } else if (row > 1 && counter <= maxDays) {
            matrix[row][col] = counter++;
          }
        }
      }
    }
    return matrix;
  }

और मेरी योजना प्रतिक्रिया घटक बनाने के लिए उत्पन्न मैट्रिक्स का उपयोग करना था, और बटन के लिए ऑनप्रेस फ़ील्ड का उपयोग करना था, फिर महीने को बदलना ताकि उस महीने के आधार पर एक नया मैट्रिक्स उत्पन्न करने के लिए हुक का उपयोग किया जा सके।

लेकिन ऐप चलाते समय यह केवल पहली बार चलता है और चेंजमोन्थ विधि का उपयोग करने के बाद ऐसा लगता है कि state.activeDate.getFullYear अपरिभाषित है।

0
user10944910 19 अक्टूबर 2020, 07:45

1 उत्तर

सबसे बढ़िया उत्तर

आपको राज्य को नीचे की तरह सेट करना चाहिए

function changeMonth(n) {
    setState({
       activeDate: new Date(state.activeDate.setMonth(state.activeDate.getMonth() + n))
      });
  }

जब आप इसे वर्तमान तरीके से करते हैं तो आप कॉलबैक फ़ंक्शन सेट कर रहे हैं जिसमें getFullYear फ़ंक्शन नहीं है।

1
Guruparan Giritharan 19 अक्टूबर 2020, 06:04