import React, {Component, useState, useEffect} from 'react'; import {connect} from 'react-redux'; import BigHeader from './bigHeader'; import SmallHeader from './smallHeader'; function isSmall() { if(this.windowWidth < 1307){ return true; } return false; } const [windowWidth, setWindowWidth] = useState(window.innerWidth); function determineWidth() { const width = window.innerWidth; setWindowWidth(width); isSmall(width); } useEffect(() => { window.addEventListener("resize", determineWidth); return function() { window.removeEventListener("resize", determineWidth); } }) class Header extends Component { render() { return this.isSmall() ? <SmallHeader/> : <BigHeader/> } } // export default connect(mapStateToProps, page); export default Header; I am getting an error from this line const [windowWidth, setWindowWidth] = useState(window.innerWidth);I am trying to return a mobile/smaller header when the screen is < 1307 and return a different header when it is above that.
4 Réponses :
Vous ne pouvez pas utiliser les crochets code> code> en dehors de la fonction. p>
pouvez-vous s'il vous plaît déplacer le code const [windowwidth, setwindowwidth] = usestate (fenêtre.innerwidth); code> dans la fonction puis l'essayer. P>
Essayez d'utiliser des dimensions à partir de React Native, ce code devrait fonctionner: Vous pouvez également mettre à jour la valeur WindowWidth chaque fois que vous appelez la fonction ISSMALL ():
import { Dimensions } from 'react-native' const windowWidth = Dimensions.get('window').width; const windowheight = Dimensions.get('window').height; function isSmall() { if(this.windowWidth < 1307){ return true; } return false; } class Header extends Component { render() { return this.isSmall() ? <SmallHeader/> : <BigHeader/> } } // export default connect(mapStateToProps, page); export default Header;
Selon React Documentation: crochets , grossièrement comme celui-ci p> crochets code> ne peut être utilisé que dans un composant fonctionnel
Si vous souhaitez utiliser des crochets (y compris des crochets personnalisés), vous devez les utiliser à partir de composants fonctionnels. Voici votre code avec des crochets personnalisés et une en-tête est un composant fonctionnel au lieu d'une classe:
import React, { useState, useEffect } from 'react'; import { connect } from 'react-redux'; import BigHeader from './bigHeader'; import SmallHeader from './smallHeader'; const useWindowWidth = () => { function determineWidth() { const width = window.innerWidth; setWindowWidth(width); } const [windowWidth, setWindowWidth] = useState( window.innerWidth ); useEffect(() => { window.addEventListener('resize', determineWidth); return function() { window.removeEventListener('resize', determineWidth); }; },[]); return windowWidth; }; function useIsSmall() { const windowWidth = useWindowWidth(); if (windowWidth < 1307) { return true; } return false; } function Header(props) { const isSmall = useIsSmall(); return isSmall ? <SmallHeader /> : <BigHeader />; } // export default connect(mapStateToProps, page); export default Header;
Les crochets doivent généralement faire partie d'une composante fonctionnelle
Un crochet doit être appelé par un composant fonctionnel.