मेरे पास एक घटक है जिसे मैं तब प्रस्तुत करता हूं जब कोई चेतावनी राज्य से खींची जाती है। वर्तमान में अलर्ट प्रेषण और प्रदर्शित करता है लेकिन मुझे निम्न त्रुटि मिल रही है और मुझे यकीन नहीं है कि मैं इस घटक का अनुपालन करने के लिए फिर से कैसे काम करूंगा।

त्रुटि: Warning: Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.

const Alerts = ({ alerts }) =>
  alerts !== null &&
  alerts.length > 0 &&
  alerts.map((alert) =>
    notification[`${alert.type}`]({
      key: `${alert.id}`,
      message: `${alert.title}`,
      description: `${alert.message}`,
    })
  );
0
Nick 8 अक्टूबर 2020, 03:25

2 जवाब

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

वास्तव में रेंडर फंक्शन शुद्ध और बिना साइड-इफेक्ट्स के होना चाहिए। याद रखें, एक कार्यात्मक घटक का संपूर्ण फ़ंक्शन बॉडी है रेंडर फ़ंक्शन। दुष्प्रभाव जारी करने के लिए useEffect हुक का उपयोग करें।

साथ ही, array::map का उपयोग करने के बजाय, array::forEach का उपयोग करें क्योंकि यह किसी सरणी पर साइड-इफेक्ट जारी करने के लिए इच्छित सरणी फ़ंक्शन है।

फ़ंक्शन से स्पष्ट रूप से null वापस आना याद रखें, यह इंगित करने के लिए कि प्रतिक्रिया देने के लिए कुछ भी नहीं है।

const Alerts = ({ alerts }) => {

  useEffect(() => {
    if (alerts) {
      alerts.forEach(alert => {
        notification[alert.type]({
          key: alert.id,
          message: alert.title,
          description: alert.message,
        })
      })
    }
  }, [alerts]);

  return null;
};
1
Drew Reese 8 अक्टूबर 2020, 04:40

मुझे लगता है कि आप इस तरह से ReactElement की एक सरणी वापस करने में सक्षम नहीं हैं, इसे आजमाएं:

const Alerts = ({ alerts }) => {
  if(alerts !== null &&
  alerts.length > 0) {
  return 
    (<>
    {alerts.map(({type, id, title, message}) =>
      notification[type]({
        key: `${id}`,
        message: `${title}`,
        description: `${message}`,
    })}
    </>)} else { return null }
  });
0
Agustin Moles 8 अक्टूबर 2020, 03:48