मैं पुश नोटिफिकेशन बनाने के लिए ReactJS के साथ एक बेसिक वेब ऐप बना रहा हूं। मैं उपयोगकर्ता को एक बटन पर क्लिक करके सेवा कार्यकर्ता को मैन्युअल रूप से पंजीकृत करने की संभावना देना चाहता हूं। लेकिन कुछ नहीं होता (कंसोल में सफलता का कोई संदेश नहीं)। क्या मैंने कहीं गलती की?

एक मानक जेएस फ़ाइल में, सेवा कार्यकर्ता को पंजीकृत करने के लिए कोड काम करता है (हालांकि बटन के बिना), लेकिन प्रतिक्रिया फ़ाइल में नहीं।

सेवा कार्यकर्ता को पंजीकृत करने के लिए कोड: यहां छवि विवरण दर्ज करें

और घटना श्रोता बटन पर: यहां छवि विवरण दर्ज करें

अग्रिम में धन्यवाद !

1
François LG 9 जुलाई 2019, 17:17

1 उत्तर

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

मुख्य मुद्दा जो मैं देख रहा हूं वह यह है कि आप एक EventListener को window से जोड़ते हैं जो 'लोड' पर निष्पादित होगा। चूंकि यह घटना पहले से ही ट्रिगर होने की सबसे अधिक संभावना है क्योंकि आप एक बटन पर क्लिक कर सकते हैं, एसडब्ल्यू लोड नहीं हो रहा है। सीधे रजिस्टर फ़ंक्शन को कॉल करने के लिए इवेंटहैंडलर भाग को हटाने का प्रयास करें। यह तब कुछ इस तरह दिखेगा:

function registerSW() {
  if ('serviceWorker' in navigator) {
    navigator.serviceWorker.register('sw.js')
    //...
  }
}

एक और मुद्दा जो मैं देख रहा हूं वह यह है कि आप इसे सीधे असाइन करके राज्य सेट करने का प्रयास करते हैं। प्रतिक्रिया में आपको इस तरह की स्थिति तक नहीं पहुंचना चाहिए बल्कि this.setState को इस तरह कॉल करना चाहिए:

// ...
.then(swReg => {
  console.log('SW registered');
  this.setState({ swReg: swReg });
})
// ...
1
Linschlager 9 जुलाई 2019, 17:31