Wie kann ich mobile und Desktop-spezifische Assets innerhalb einer Komponente durch Berechnung der Seitenbreite rendern. Scheint wie ternäre Ausdrücke sind der Weg durch die Berechnung der Fensterbreite, aber ich bin auf Probleme stoßen. HierReact - Render Component basierend auf windowWidth
ist die Bedingung:
Wenn die Fenstergröße größer als 500 kann sagen - macht die Desktop-Komponente, die als Desktop bestimmte Vermögenswerte.
Else, render die mobile Komponente, die mobile spezifische Assets hat.
Ein weiterer Fall in dieser Logik ist, wenn eine Video-URL zur Verfügung gestellt wurde, hat dies Vorrang vor dem Fallback-Bild. Hier
ist, was ich habe, so weit, ich habe eine Formatfunktion die „window.innerWidth“ und aktualisiert Zustand wie so zu erhalten:
resize() {
let windowWidth = window.innerWidth;
this.setState({
windowWidth: windowWidth
})
}
ich die Variable Window als Requisiten an die Komponente zu übergeben mit der bedingte Logik.
Hier ist meine Logik so weit:
render() {
const {windowWidth, video, fallbackImage, mobileVideo, mobileImage, videoCallback, videoAnimationOffset} = this.props;
return (
<div className="hero-wrap col-xs-12 no-padding">
{/* If video is available load otherwise render fallback image */}
{video ? (
<div className="video-container">
<Video
video={video}
mobileVideo={mobileVideo}
videoCallback={videoCallback}
videoAnimationOffset={videoAnimationOffset}
/>
</div>
) :
<div className="image-container" style={{backgroundImage: `url(${process.env.DB_URL}${fallbackImage})`}}>
</div>
}
</div>
)
}
Hier ist vielleicht ein Begriff von dem, was ich denke, funktionieren könnte, aber sie können nicht verschachtelt ternäre Ausdrücke:
{/* If window width is greater than 500 render desktop */}
{windowWidth > 500 ?
{video ? (
<div className="video-container">
<Video
video={video}
mobileVideo={mobileVideo}
videoCallback={videoCallback}
videoAnimationOffset={videoAnimationOffset}
/>
</div>
) :
<div className="image-container" style={{backgroundImage: `url(${process.env.DB_URL}${fallbackImage})`}}>
</div>
} : null
}
Was ist die Frage? – wgcrouch
Sie können CSS-Medienabfragen nicht verwenden? Genau dafür sind sie da und sie sind schneller, zuverlässiger und reaktionsfähiger. –
Ich benutze Medienabfragen, aber ich möchte die Desktop-Komponente überhaupt nicht auf der Seite zum ersten Laden rendern. – Filth