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

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

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

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

React.js

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

Q&A

解決済

1回答

4848閲覧

material-ui treeView のデフォルト展開している表示にしたいです。

j.f15

総合スコア23

Material-UI

Material-UIは、Material Designを利用可能なオープンソースのReact向けUIコンポーネントキットです。

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2021/06/28 02:11

編集2021/06/28 02:27

前提・実現したいこと

material-ui のツリーコンポーネントで
ツリー表示時に選択されている値まで階層が展開されているようなデザインにしたいです。

発生している問題・エラーメッセージ

defaultExpanded の値に 階層をスラッシュ区切り指定する事まではわかり
値を入れてみたのですが上手く動作しませんでした。
試しに defaultExpanded=["Singlets_FSC", "Singlets_FSC/Singlets_SSC"] のように直接入れたときは
その階層まで上手く展開しました。

該当のソースコード

↓defaultExpanded に入れる値作成の処理

javascript

1useEffect(() => { 2 setRadioValue(defaultData); 3 4 let oneIdx = defaultData.split("/"); 5 let openTree = [oneIdx[0]]; 6 7 //下記処理説明 [1, 2, 3] → [1, 1/2, 1/2/3] のような処理をしている 8 for (let i = 1; i < oneIdx.length; i++) { 9 let arr1 = []; 10 arr1.push(openTree[i - 1]); 11 arr1.push(oneIdx[i]); 12 let arr2 = arr1.join("/"); 13 openTree.push(arr2); 14 } 15 openTree.pop(); 16 17 setExpandedValue(openTree); 18 }, [defaultData]);

↓描画の処理

javascript

1if (defaultData) { 2 console.log(expandedValue); //送付ログ245行目 3 console.log(["Singlets_FSC", "Singlets_FSC/Singlets_SSC"]); 4 console.log(typeof (expandedValue)); 5 console.log(typeof (["Singlets_FSC", "Singlets_FSC/Singlets_SSC"])); 6 var toString = Object.prototype.toString; 7 console.log(toString.call(expandedValue)); 8 console.log(toString.call(["Singlets_FSC", "Singlets_FSC/Singlets_SSC"])); 9 if (expandedValue == ["Singlets_FSC", "Singlets_FSC/Singlets_SSC"]) { 10 console.log("型チェック true"); 11 } 12 13 if (!data || !Object.keys(data).length) { 14 console.log(expandedValue); 15 return <div className={classes.root}> 16 <TreeView defaultExpanded={expandedValue} /> 17 {/* <TreeView defaultExpanded={["Singlets_FSC", "Singlets_FSC/Singlets_SSC"]} /> */} 18 </div> 19 } 20 21 console.log(expandedValue); 22 23 return ( 24 <div className={classes.root}> 25 <TreeView defaultExpanded={expandedValue}> 26 {/* <TreeView defaultExpanded={["Singlets_FSC", "Singlets_FSC/Singlets_SSC"]}> */} 27 { 28 makeTree(Object.keys(data)[0], 29 data[Object.keys(data)[0]], 30 Object.keys(data)[0]) 31 } 32 </TreeView> 33 </div> 34 ); 35 }

※描画処理箇所のログ
![イメージ説明

試したこと

それぞれの値の確認と型チェックを行いましたがログのように同じ値、同じ型となっていました。
ただ、型チェック後の == の比較が通らないという事に気づき、ここが原因となっていると予想は出来ているのですが、何故通らないのかがわからなかったので質問させて頂きました。
また、それが原因ではない場合は何が悪いのか教えて頂きたいです。

どなたか未熟な自分にご教示をお願いしたいです。

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

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

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

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

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

guest

回答1

0

自己解決

自己解決する事が出来ました。

デフォルト時だけで、ツリーを描画している間に動的に展開する処理が要らなかったため
defaultExpanded を使用していましたが、 defaultExpanded は一番最初のコンポーネントが読み込まれた瞬間だけの為、
["Singlets_FSC", "Singlets_FSC/Singlets_SSC"] のような生データでは上手く描画され
動的に作った値は defaultExpanded の値指定後に作成されていたため描画されないといった事が起きていました。

解決方法自体は簡単で defaultExpanded を expanded に変更するだけで上手く動作させる事が出来ました。

※追記
expanded指定の場合、逆にツリーをそれ以上開くことが出来なくなってしまうため
defaultExpanded指定で、指定する値の箇所は一つ親の値を参照してくるような処理に修正しました。

投稿2021/06/28 07:07

編集2021/07/26 11:52
j.f15

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問