मैं Zendesk Webwidget का उपयोग कर रहा हूं, और ऐसा लगता है कि मैं जो स्क्रिप्ट जोड़ रहा हूं और केवल होम पेज पर दिखा रहा हूं, वह अन्य पेजों पर भी लोड होता है, साथ ही अगर मैं उन पेजों को पहले ब्राउज़र पर लोड करता हूं।

अपेक्षित व्यवहार: सीधे सहायता रूट/घटक पर जाने से Zendesk WebWidget स्क्रिप्ट को होम पेज पर रूट करने तक लोड नहीं होना चाहिए।

प्राप्त व्यवहार: सीधे सहायता मार्ग/घटक पर जाने से Zendesk WebWidget लोड हो जाता है।

यहाँ कुछ नमूना कोड है:

मार्ग:

const AppRoutes = () => (
  <AppContainer>
   <Switch>
    <Route exact path="/help" component={Help} />
    <Route exact path="/" component={Home} />
   </Switch>
  </AppContainer>
);

घर:

const zendeskWidget = new Promise((resolve, reject) => {
  const script = document.createElement('script');
  script.src = 'https://myzendeskscript.com';
  script.setAttribute('id', 'ze-snippet');
  script.async = true;
  script.addEventListener('load', function () {
    resolve();
  });
  script.addEventListener('error', function (e) {
    reject(e);
  });
  document.body.appendChild(script);
});

class Home extends React.Component {
  componentDidMount() {
    zendeskWidget.then(() => {
      // code to show the widget when coming back to the home page
      if(zE && zE.show) {
        zE.show();
      }
    });
  }

  componentWillUnmount() {
    zendeskWidget.then(() => {
      // code to hide the widget when leaving home page
      if(zE && zE.hide) {
        zE.hide();
      }
    });
  }
  render() {
    return (
      <HomeContainer />
    );
  }
};

मदद:

const Help = () => (
  <HelpContainer>
    Some Text
  </HelpContainer>
);
1
kcvan 29 नवम्बर 2018, 23:51

1 उत्तर

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

चूंकि इससे आपको मदद मिली, मुझे लगता है कि मैं इसे एक उत्तर के रूप में रखूंगा।

जब आप सिंगल पेज एप्लिकेशन की प्रकृति से प्रतिक्रिया ऐप लोड करते हैं तो यह घटक लोड करने जा रहा है। चूंकि आपका zendeskWidget const जीवनचक्र हुक के बाहर परिभाषित किया गया है, यह घटक को लोड करते समय स्क्रिप्ट को लोड करेगा। यदि आप यह व्यवहार नहीं चाहते हैं, तो आपको स्क्रिप्ट लोड को कहीं न कहीं जीवनचक्र के हुक में ले जाना होगा।

2
obermillerk 30 नवम्बर 2018, 00:05