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

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

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

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

Q&A

解決済

1回答

334閲覧

Reactでstyle適用を簡潔に書く方法

退会済みユーザー

退会済みユーザー

総合スコア0

React.js

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

0グッド

0クリップ

投稿2017/09/03 18:13

現在reactのチュートリアル「tic tac toe」の練習問題をやっています。
その最後の問題
「5. When someone wins, highlight the three squares that caused the win.」
というのをやっています。

いくらかやったあとに答えを調べてみると、
何点か変更した一部に以下がありました。

javascript

1function Square(props){ 2 3 if(props.highlight){ 4 return( 5 <SquareStyle className="square" style={{color: "red"}} onClick={props.onClick}> 6 {props.value} 7 </SquareStyle> 8 ); 9 }else{ 10 return( 11 <SquareStyle className="square" onClick={props.onClick}> 12 {props.value} 13 </SquareStyle> 14 ); 15 } 16}

これは四角形を描画する関数で、以上のように記述すると見事理想通りに動くのですが、ほとんど同じ3行を繰り返すのはなんだか受け付けないなと感じ、修正してみました。

これとか

javascript

1 const redLine = props.highlight? "red-line": ""; 2 return( 3 <SquareStyle className="square" onClick={props.onClick}> 4 <span className={redLine}>{props.value}</span> 5 </SquareStyle> 6 ); 7

これとか

javascript

1 let squareClass = "square " + (props.highlight?"red-line":""); 2 return( 3 <SquareStyle className={squareClass} onClick={props.onClick}> 4 {props.value} 5 </SquareStyle> 6 );

これとか

javaascript

1 return( 2 <SquareStyle className={`square ${props.highlight ? "red-line": ""}`} onClick={props.onClick}> 3 {props.value} 4 </SquareStyle> 5 );

これとか

javascript

1return( 2 <SquareStyle className="square" style={props.highlight? 'color:"red"': '""'} onClick={props.onClick}> 3 {props.value} 4 </SquareStyle> 5 );

色々試行錯誤して試してみたのですが、どれも上手く行きませんでした。

styleの適用にはstyled componentを使っています。

javascript

1export const SquareStyle = styled.button` 2 background: #fff; 3 border: 1px solid #999; 4 float: left; 5 font-size: 40px; 6 font-weight: bold; 7 line-height: 74px; 8 height: 74px; 9 margin-right: -1px; 10 margin-top: -1px; 11 padding: 0; 12 text-align: center; 13 width: 74px; 14 &:focus{ 15 outline: none; 16 } 17 span{ 18 .red-line{ 19 color:red; 20 } 21 } 22`;

一つ目の「色を変えるときだけidを付与する」というのは、同じファイルの違う部分(こちらは、コンポーネントの中のコンポーネントです)でできているので、ココでもできるようなきがしていたのですができませんでした。

React初心者なのでどこに問題があるのかわかりません。
文法的な問題点や、 僕が求めているコードの回答例などがありましたらご教示願えませんでしょうか。

よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

styled componentsを使っているのに、classNameやstyleプロパティを併用して使っているのが気になります。使えないわけではないですが。styled componentsですべてのスタイリングを行えば良いと思うのですが。

とりあえず、以下が参考になると思います。

https://www.styled-components.com/docs/basics#adapting-based-on-props

自分ならstylesquareにhighlight propを用意して、そこにブーリン値渡して、あとはstylesquareのスタイリング記述の方で、上のurlみたいに分岐させると思います。

投稿2017/09/03 22:28

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/09/04 04:26

たしかに今のままだとsass書いてるのとあまり変わりありませんでした。 見事理想通りのコードが書けました。 styled componentも含めてreactの勉強頑張ります。 ありがとうございました。助かりました。
退会済みユーザー

退会済みユーザー

2017/09/04 14:00

ベストアンサーくだちゃい♡
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問