🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

Q&A

1回答

2920閲覧

React Nativeで画面サイズ(幅)によってStyleを切り替えたい

koooziii

総合スコア6

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

0グッド

0クリップ

投稿2021/03/29 14:22

React Native初心者の者です。どうぞよろしくお願い致します。

現在、React Nativeを使用してWebアプリケーションを作成しております。React Nativeでのレスポンシブ対応の方法を
様々なライブラリがあるかと思いますが、今回はチームリーダーから「画面サイズによってStyleの切り替え」を行ってくださいと言われており、対応方法が分からず
手が止まっている状況です。

実現したいこととしては、
①レスポンシブ対応(ブレイクポイントは480を想定)
②画面サイズによって、Styleを切り替える の2点です。

※記述量はできるだけ少なく抑えたいです。

React nativeの知見・経験が豊富な方がいらっしゃいましたら、教えていただけますと幸いです。
どうぞよろしくお願い致します。

Sample.js

import React, {Component} from 'react'; import {View, Text, ScrollView, TouchableOpacity} from 'react-native'; import styles from './Styles/SampleStyle'; class SignUpScreen extends Component { state = { }; render() { var {width, height, scale} = Dimensions.get('window'); return (     <View style={styles.centerContainer}> <Text style={styles.title}>サンプル</Text> </View> ); } } export default connect( )(SignUpScreen);

SampleStyle.js

import {StyleSheet} from 'react-native'; export default StyleSheet.create({  centerContainer: { width: 200, height: 300, }, title: { fontSize: 20, fontWeight: '700', marginBottom: 30, }); ※画面幅が480以下の時、以下のstyleに切り替わるようにしたいです。 centerContainer: { width: 100, height: 150, }, title: { fontSize: 10, fontWeight: '700', marginBottom: 10,

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

私も勉強中ですが、私は useWindowDimensions を使いました。最近書いたのがあるので、簡単に書き直して載せます。参考になれば幸いです。

簡単ですがこんな感じです。

ReactNative

1import * as React from 'react'; 2import { 3 View, Text, StyleSheet, useWindowDimensions, 4} from 'react-native'; 5 6const SignUpScreen = () => { 7 // 閾値の設定 8 const window = useWindowDimensions(); 9 const thresholdForWindowWidth = 480; 10 const isNarrowWindow = (window.width <= thresholdForWindowWidth); 11 return ( 12 <View style={isNarrowWindow ? styles.containerWide : styles.containerNarrow}> 13 <Text style={isNarrowWindow ? styles.titleWide : styles.titleNarrow}> 14 サンプル 15 </Text> 16 </View> 17 ); 18}; 19 20const styles = StyleSheet.create({ 21 // forWideWindow 22 containerWide: { 23 width: 200, 24 height: 300, 25 }, 26 titleWide: { 27 fontSize: 20, 28 marginBottom: 30, 29 fontWeight: '700', 30 }, 31 // forNarrowWindow 32 centerContainerNarrow: { 33 width: 100, 34 height: 150, 35 }, 36 titleNarrow: { 37 fontSize: 10, 38 marginBottom: 10, 39 fontWeight: '700', 40 }, 41}); 42 43export { SignUpScreen as default }; 44

もしくは、

ReactNative

1import 'react-native-gesture-handler'; 2import * as React from 'react'; 3import { 4 View, Text, StyleSheet, useWindowDimensions, 5} from 'react-native'; 6 7const SignUpScreen = () => { 8 // 閾値の設定 9 const window = useWindowDimensions(); 10 const thresholdForWindowWidth = 480; 11 const isNarrowWindow = (window.width <= thresholdForWindowWidth); 12 13 const styles = StyleSheet.create({ 14 centerContainer: { 15 width: isNarrowWindow ? 200 : 100, 16 height: isNarrowWindow ? 300 : 150, 17 }, 18 title: { 19 fontSize: isNarrowWindow ? 20 : 10, 20 marginBottom: isNarrowWindow ? 30 : 10, 21 fontWeight: '700', 22 }, 23 }); 24 25 return ( 26 <View style={styles.centerContainer}> 27 <Text style={styles.title}> 28 サンプル 29 </Text> 30 </View> 31 ); 32}; 33 34export { SignUpScreen as default };

と書きました。

もしuseWindowDimensionsではなくDimensionsを使うのであれば、

ReactNative

1import 'react-native-gesture-handler'; 2import * as React from 'react'; 3import { 4 View, Text, StyleSheet, Dimensions, 5} from 'react-native'; 6 7const SignUpScreen = () => ( 8 <View style={styles.centercontainer}> 9 <Text style={styles.title}> 10 サンプル 11 </Text> 12 </View> 13); 14 15// 閾値の設定 16const window = Dimensions.get('window'); 17const thresholdForWindowWidth = 480; 18const isNarrowWindow = (window.width <= thresholdForWindowWidth); 19 20const styles = StyleSheet.create({ 21 centerContainer: { 22 width: isNarrowWindow ? 200 : 100, 23 height: isNarrowWindow ? 300 : 150, 24 }, 25 title: { 26 fontSize: isNarrowWindow ? 20 : 10, 27 marginBottom: isNarrowWindow ? 30 : 10, 28 fontWeight: '700', 29 }, 30}); 31 32export { SignUpScreen as default }; 33

でしょうか。私はDImensionsは使ったことないですが、公式ページ(Dimensions)には、useWindowDimensions is the preferred API for React components. Unlike Dimensions, it updates as the window's dimensions update. This works nicely with the React paradigm.と書いてあります。

投稿2021/04/11 09:24

Akira25

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問