Hej Wszystkim,

Jak to bywa w naszym pięknym zawodzie, czasem dostajesz zadania zupełnie spoza swojego zakresu :) dziś trafiło na mnie i na React Native js o którym nie mam zielonego pojęcia. Chodzi o to, że w RN jest taka biblioteka jak Dimmensions, która zwraca nam właściwości ekranu.

https://reactnative.dev/docs/dimensions

Chodzi o to, że te właściwości nie zmieniają się kiedy podepniemy kabel HDMI. Co ciekawe - tylko dla Androida, iOS działa ok. Doczytałem w powyższym linku, że powinno korzystać się z biblioteki useWindowDimensions(). No i tu pojawiają się schody. W każdym miejscu gdzie użyję tej funkcji, aplikacja się zawiesza. Doczytałem gdzieś, że biblioteki różnią się od siebie tym, że useWindowDimensions() korzysta z hooków, czyli jak się domyślam czegoś podobnego do wskaźników z C++.

Spróbowałem więc przykładu z powyższego linka, który też korzysta z hooków:

import React, { useState, useEffect } from "react";
import { View, StyleSheet, Text, Dimensions } from "react-native";

const window = Dimensions.get("window");
const screen = Dimensions.get("screen");

const App = () => {
  const [dimensions, setDimensions] = useState({ window, screen });

  const onChange = ({ window, screen }) => {
    setDimensions({ window, screen });
  };

  useEffect(() => {
    Dimensions.addEventListener("change", onChange);
    return () => {
      Dimensions.removeEventListener("change", onChange);
    };
  });

  return (
    <View style={styles.container}>
      <Text>{`Window Dimensions: height - ${dimensions.window.height}, width - ${dimensions.window.width}`}</Text>
      <Text>{`Screen Dimensions: height - ${dimensions.screen.height}, width - ${dimensions.screen.width}`}</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center"
  }
});

export default App;

i apka również się zawiesza w linijce:

const [dimensions, setDimensions] = useState({ window, screen });
  • czy ktoś z was spotkał się z podobnym problemem?
  • jest jakaś możliwość obejścia tego?
  • czy wina może być po starej wersji RN - 0.60.6? (Oby nie bo nie mam możliwości updatu)
  • może w RN jest jakaś inna biblioteka przeznaczona specjalnie do zdarzeń typu podpięcie zewnętrznego monitora?