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

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

新規登録して質問してみよう
ただいま回答率
85.50%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

Q&A

2回答

1405閲覧

Reactで動的にクラスを付与したい!

KobeanH

総合スコア6

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

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

0グッド

0クリップ

投稿2022/01/23 08:24

実現したいこと

1.配列arr1をmapでliタグとしてHTML出力

2.liタグは最初「?」を表示しているが、クリックすると、クリックされた要素のみ「?」が消え、配列の中身が表示される

const arr1 = [1, 2, 3, 4, 5, 6];

map処理後

? ? ? ? ? ?

二番目の「?」をクリックした場合       五番目の「?」をクリックした場合
↓                      ↓
? 2 ? ? ? ?            ? ? ? ? 5 ?

現在のコード

import { useState } from "react"; import styles from "./style.module.css"; export const Game = () => { const [none, setNone] = useState(true); const arr1 = [1, 2, 3, 4, 5, 6]; const addNone = () => { setNone(false); }; return ( <div className="game"> {arr1.map((arr, i) => ( <li key={i} onClick={addNone}> ?<span className={none === true ? styles.none : ""}>{arr}</span> </li> ))} </div> ); };
style.module.css .none { display: none; }

現在の状況

mapで配列arr1を<li>で出力し、liタグをクリックするとstateの状態が変わり、その結果、クラスがなくなり、数字が表示されるところまでできました。
しかし、現在のコードだと「?」は残ったままですし、何より<li>をクリックした際に、クリックした要素だけ数字が表示されるのではなく、全ての要素の数字が表示されてしまいます。

どのようにすればクリックした要素のみが数字を表示できるようになるのでしょうか?

stateで状態を管理して三項演算子を使ってクラスの付与をするのは間違いでしょうか?

何卒、よろしくお願いします。

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

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

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

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

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

guest

回答2

0

stateで状態を管理して三項演算子を使ってクラスの付与をするのは間違いでしょうか?

いえ、逆に状態の数が足りません。6つの表示/非表示をバラバラに制御したいなら、6要素の配列を使うなどで6つの状態を別々に管理する必要があります(スカラー値1つでは、全部同じ形にしか制御できません)。

投稿2022/01/23 09:45

maisumakun

総合スコア145123

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

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

KobeanH

2022/01/23 12:08

ご回答ありがとうございます! 配列のlengthが可変の場合はどのように実装するべきでしょうか?
guest

0

クリックされた要素のみ「?」が消え

これが複数でなくて一つで良いなら、中身を見せる index を state として持っておき、arr1.map((content, index)=>if(index==open){return...}else{return null}) みたいにすればいいでしょう

複数要素の中身を見せる実装でも同じように(中身を見せる index たちを state として持っておく)すればよいのではないかと思います。set も使えそうです。

投稿2022/01/27 02:40

sum6

総合スコア232

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問