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

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回答

957閲覧

検索後、スタイルが反映されないので反映させたいです。

yaha4967

総合スコア106

Material-UI

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

JavaScript

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

React.js

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

0グッド

0クリップ

投稿2021/05/04 18:50

検索後、スタイルが期待通りに反映されません。何かアドバイスが欲しいです!

前提

react + Rails APIで開発をしています。

そのなかで現在、検索機能を作っていまして
ユーザーがフォームを送信し検索をしたら、preventDefaultでリロードをせずそのまま、検索結果を表示するようにしています。

フォームの値を処理する部分のコードがこちらです。

jsx

1export const SearchForm = () => { 2//検索ワードを入れる 3 const [name, setName] = useState("") 4//APIから返ってきた値を入れる 5 const [searchedPuas, setPuas] = useState([]); 6 const [reviewsAverageSet, setAverage] = useState([]); 7 8 9 const handleClick = (e) =>{ 10 e.preventDefault(); 11 searchPuas({ 12 name: name 13 }) 14 .then((data) =>{ 15//APIから返ってきた値をセット 16 setPuas(data.searchedPuas); 17 setAverage(data.reviewsAverageSet); 18 }) 19 } 20 21 return ( 22 <Fragment> 23 <form> 24 25 <TextField 26 label="検索" 27 value={name} 28 onChange={e => setName(e.target.value)} 29 /> 30 31 <button type="submit" onClick={(e) => handleClick(e)}> 32 送信 33 </button> 34 35 </form> 36//検索結果をここで表示します。問題のスタイル部分はここのGeneratePuaCardです。下の方に中身の抜粋を載せてます。 37 { 38 searchedPuas && 39 searchedPuas.map((pua, i) => 40 41 <GeneratePuaCard 42 pua={pua} 43 reviewsAverageSet={reviewsAverageSet} 44 index={i} 45 /> 46 ) 47 } 48 49 <Footer/> 50 </Fragment> 51 ) 52} 53コード

問題

しかし、このやり方ですと値は更新されているのですがスタイルが更新されません。

更新されない部分の抜粋

jsx

1//値はちゃんと入ってるようです。 2 {console.log(`Rating:`,reviewsAverageSet[index])} 3 <Rating 4 name="read-only" 5 value={reviewsAverageSet[index]} 6 readOnly 7 precision={0.5} 8 />

本来なら値の分だけ☆に色が付くのですが、、、
スタイルが更新されていれば☆が黄色く塗られるはずなのですが塗られていません。

何かいい方法ありましたらご教示頂けると幸いです!よろしくお願いします!

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました!同じような問題にぶつかった方に参考になったらいいなと思うので以下解決法書きます!

どうやら、フォームには種類があってstateで値を管理できるフォームとできないフォームがあるみたいです。

前者がcontrollで後者がuncontrolledです。

で、基本フォームはデフォルトでcontrollなのですが、フォームの値にnullやundefineが入ってしまうとuncontrolledになってしまい、stateの値が使えなくなってしまいます。

なので、uncontrollになってしまわないようこのようにしたら解決しました!

<Rating name="read-only" value={reviewsAverageSet[index] ? reviewsAverageSet[index] : 0} readOnly precision={0.5} />

投稿2021/05/04 18:57

yaha4967

総合スコア106

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問