質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
React Native

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2441閲覧

React NativeでCSSが反映されない

FKM

総合スコア3647

React Native

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/04/15 02:24

編集2021/04/15 02:31

Reactで写真共有兼検索プログラムを制作中にCSSを制御してみようとしたのですが、
反映されません。

方法はCSS-loaderを使ってみて、webpack-dev-serverもnpm startも正常に動いていますが、ロード時にJSXのclassNameが何も表示されていない状態です。

参考ページはここなどです。
ReactでCSSを使う
ここに記載されているプラグインは全部インストールしています。

使用環境

  • Apache 2.4.6
  • npm: 6.14.6

採用しているReactの記法はクラスコンポーネントです。現在は、CSSのデザイン制御以外は正常に動作しています。

ソースコード

メインのJSX

js

1import React from "react"; 2import City from '../../json/city.json'; 3import State from '../../json/state.json'; 4import styles from './style.css'; 5 6export default class Main extends React.Component { 7 //定義 8 constructor(){ 9 super(); 10 this.state = { 11 countries:[ 12 {id:1,ab:"US",name:"United States"}, 13 {id:2,ab:"JP",name:"Japan"}, 14 {id:3,ab:"CN",name:"China"}, 15 ], 16 states:State, 17 cities:City, 18 word: "", //プロパティの定義 19 selectCountry: "", 20 selectState: "", 21 searchWord: "", 22 li_data: [], 23 hits: [] 24 }; 25 this.optionCountry = this.state.countries.map((item)=> 26 <option key={item.id.toString()} value={item.ab}>{item.name}</option> 27 ); 28 //リアクティブ制御 29 this.selectCountry = this.selectCountry.bind(this); //リアクティブにさせる定義 30 this.selectState = this.selectState.bind(this); //リアクティブにさせる定義 31 this.searchWord = this.searchWord.bind(this); 32 } 33 34 //国名を選択 35 selectCountry(elem){ 36 const cities = this.state.cities 37 this.setState({ selectCountry: elem.target.value }); 38 const hits = cities.filter((item,key)=>{ 39 console.log(item) 40 console.log(elem.target.value) 41 console.log(item.state) 42 return item.state == elem.target.value 43 }) 44 this.setState({hits: hits}) 45 } 46 //エリアを選択 47 selectState(elem){ 48 const cities = this.state.cities 49 const hits = cities.filter((item,key)=>{ 50 console.log(elem.target.value) 51 console.log(item.state) 52 return item.state == elem.target.value 53 }) 54 this.setState({hits: hits}) 55 } 56 //フリーワード検索 57 searchWord(e){ 58 const word = e.target.value 59 const cities = this.state.cities 60 const hits = cities.filter((item,key)=>{ 61 return item.name.includes(word) 62 }) 63 this.setState({hits: hits}) 64 } 65 clear(){ 66 //this.selectCountry( null) 67 } 68 69 70 71 //レンダリングを行う記述 72 render() { 73 return ( 74 <> 75 <label> 国の選択 </label> 76 <select onChange={this.selectCountry} > 77 <option >-- 国名を選択 --</option> 78 {this.optionCountry} 79 </select> 80 <label> エリアの選択</label> 81 <select onChange={this.selectState} > 82 <option >-- エリアを選択 --</option> 83 { 84 this.state.states.map((item,key)=>{ 85 if(item.country == this.state.selectCountry){ 86 return ( 87 <option key={item.id} value={item.code}> 88 {item.name} 89 </option> 90 ) 91 } 92 }) 93 } 94 </select> 95 <br/> 96 <h4>検索文字を入力してください</h4> 97 <input type="text" onChange={ this.searchWord} /> 98 <button onClick={ this.clear }>clear</button> 99 <div>ヒット数:{this.state.hits.length}</div> 100   <ul className={styles.ulDatas}> 101 { 102 this.state.hits.map((item,key)=>{ 103 return( 104     <li className={styles.liData} key={item.id}> 105     <label className={styles.lbHit}>{ item.name }</label> 106      <br /> 107      <img className={styles.imageStyle} src={`../../img/${item.src}`} alt={ item.name } /> 108     </li> 109 ) 110 }) 111 } 112   </ul> 113 114 </> 115 ); 116 } 117} 118

css

1.ulDatas{ 2 width: 800px; 3 display: block; 4 margin: 0px; 5} 6.liData{ 7 width: 198px; 8 height: 198px; 9 display: inline-block; 10 vertical-align: top; 11 border: 1px brown solid; 12 border-radius: 0 0 10px 0; 13 margin: 5px; 14} 15.imageStyle{ 16 max-width: 90%; 17 margin-left: 5%; 18 margin-right: 5%; 19} 20.lbHit{ 21 background-color: black; 22 color: white; 23 font-weight: bold; 24 padding: 1px 0 1px 2px; 25 width: 196px; 26 height: 22px; 27 display: block; 28}

webpack.config.js (使用しているバージョンは4.3)

js

1//一部抜粋 2 module: { 3 rules: [{ 4 test: /.jsx?$/, 5 exclude: /(node_modules|bower_components)/, 6 use: [{ 7 loader: 'babel-loader', 8 options: { 9 presets: ['@babel/preset-react', '@babel/preset-env'] 10 } 11 }] 12 }, 13 { 14 test: /.css$/, 15 use: [ 16 { 17 loader: 'css-loader', 18 options :{ 19 modules : true 20 } 21 }, 22 ], 23 }, 24

やってみたこと

  • cssファイルをディレクトリ直下からcomponentsと同階層に
  • style.cssに記載したクラス名称をキャメルケースに変更
  • サーバの再起動

根本的な問題なのか、JSXの中に何もクラス名が記載されていないままとなっており、解決の糸口が見えていないので助言いただけたらと思います。

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

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

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

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

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

guest

回答1

0

自己解決

npm startで起動した場合は
オブジェクトリテラルにせず、そのままクラス名指定を明示すれば解決しました。
もし、オブジェクトリテラルにすると何も読み込みません。

js

1<ul className="ulDatas"> 2 { 3 this.state.hits.map((item,key)=>{ 4 return( 5     <li className="liData" key={item.id}> 6     <label className="lbHit">{ item.name }</label> 7      <br /> 8      <img className="imageStyle" src={`../../img/${item.src}`} alt={ item.name } /> 9     </li> 10 ) 11 }) 12 } 13   </ul>

ただし、cssファイルのインポートは必須のようです。

投稿2021/04/17 18:18

FKM

総合スコア3647

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問