react-native-responsive-screen icon indicating copy to clipboard operation
react-native-responsive-screen copied to clipboard

TypeError: this.setState is not a function

Open anisharya16 opened this issue 5 years ago • 6 comments

Is this a bug report, a feature request, or a question? Bug

Is the bug reproducible in a production environment (not a debug one)? Yes

Environment "react": "16.11.0", "react-native": "0.62.2", "react-native-responsive-screen": "^1.4.1",

Target Platform: Android (9.0)

Bug: TypeError: this.setState is not a function. (In 'this.setState({orientation: screenWidth < screenHeight ? 'portrait' : 'landscape'})', 'this.setState' is undefined)

I was using class component but had to change it to functional component as per project requirement. Since I changed it to functional component, orientation change is not working and am getting this error. I have attached screenshot for reference to this. Need solution for this, as i have used this library many times in my project.

WhatsApp Image 2020-07-20 at 12 00 28

anisharya16 avatar Jul 20 '20 06:07 anisharya16

Any solution for this issue?

anisharya16 avatar Aug 05 '20 09:08 anisharya16

Is the code where you are calling this a functional component or a class component?

Can you show us the code where you are calling listenOrientationChange() ?

gregfenton avatar Aug 07 '20 18:08 gregfenton

I suspect your issue is related to PR https://github.com/marudy/react-native-responsive-screen/pull/70

gregfenton avatar Aug 07 '20 18:08 gregfenton

See the PR I just pushed: PR #83

It has instructions on how to download and use it. Hopefully we can get this pulled into master and published soon.

gregfenton avatar Aug 14 '20 04:08 gregfenton

Hello, you have changed from class component to functional component thus, this.setState is now working in Functional component instead you can use Hooks.

samimhakimi avatar Nov 15 '20 05:11 samimhakimi

make some changes in code like :

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

useEffect(() => {
    const subscription = Dimensions.addEventListener(
        'change',
        ({ window, screen }) => {
            setDimensions({ window, screen });
        }
    );
    return () => subscription?.remove();
});
return dimensions.screen.height > dimensions.screen.width ? 'portrait' : 'landscape'

}

tejfaster avatar Jul 30 '22 19:07 tejfaster