2

For : expo --version 4.9.0 and "@react-navigation/bottom-tabs": "^5.11.11", "@react-navigation/drawer": "^5.12.5", "@react-navigation/native": "^5.9.4", "@react-navigation/stack": "^5.14.5",

Event listeners never get triggered after an event occurrences.

useFocusEffect(
    React.useCallback(() => {
      // Clearing all the pending information to be transferred..
      OperationPending.emit("notPending");
      // Listening on the refresh event
      RefreshEventEmitter.addListener("refresh", () => {
        sendMqttCmd("getTime");
      });

      // Listening for connection status on this event...
      MqttConnection.addListener("status", () => {
        // Setting the connection status
        setIsConnected(getWSConnStatus());
      });

      let response = setTimeout(() => setNoResponse(true), 20000);

      console.log("Just before event..");

      // Creating a new listeners to execute on this event..
      MqttEvents.addListener("freshDataAvailable", () => {
        console.log("Executed event in getDevice");

        // ----------------------------------------------
        // Try to parse the got mqtt data object and if found error, handle
        // it in catch section..
        try {
          // If length of the array to be rendered by flatlist is not 0
          // then page is not refreshing any more!! Show the data..
          if (getDeviceTime().hr !== undefined) {
            console.log("Executed in getDevic");
            // If time is readdy to fetched..
            let mqttTime = getDeviceTime();
            setDateTimeObj({
              hourCount: Number(mqttTime.hr),
              minCount: Number(mqttTime.min),
              secCount: Number(mqttTime.sec),
            });
            // Also clear the timeout checking for no response as we got response
            clearTimeout(response);
            // Setting isPageRefreshing to false, let flatlist render the items
            setTimeout(() => setIsPageRefeshing(false), 500);
          }
        } catch (error) {}

        // Increasing the count, re-renders the screen, what we exactly want..
        // setCount(count + 1);
      });
      // ----------------------------------------------
      // Removing all the listeners, so that screen does not re-render after unmounting..
      const unsubscribe = () => {
        console.log("Also unsubscribed..");
        clearTimeout(response);
        clearInterval(shouldRenderInterval);

        MqttConnection.removeAllListeners();
        RefreshEventEmitter.removeAllListeners();
        MqttEvents.removeAllListeners();
      };

      // ----------------------------------------------
      // Returned function is called when screen is unmounted from display!!
      return () => unsubscribe();
    }, [
      count,
      MqttEvents,
      OperationPending,
      RefreshEventEmitter,
      secCount,
      isPageRefreshing,
    ])
  ); 

On event triggering no console log is shown!!

Hopefully I'll get solution here, Regards..

gaurav
  • 491
  • 3
  • 13

0 Answers0