🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
React Native

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

JavaScript

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

React.js

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

Q&A

1回答

987閲覧

Reactでおみくじを作っています

uheiuhei

総合スコア0

React Native

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

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2021/02/06 06:51

React初心者です。

https://newsite-make.com/task-study/app-implementation/のページの一番上におみくじがある(JavaScript)のですがそれをReactで再現しようとしています。

イメージ説明

赤丸の中に?があってそれをクリックするたびに大吉、中吉、凶に切り分けようとしているのですが最初が「?」にできなく大吉、中吉、今日のいづれかが表示されていてクリックしてもテキストを変えることができません。

コードをどう変えれば「?」が表示されてクリックするたびにテキストが変わるようになるのでしょうか?

Reactのコードは↓になります。

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Reactで作ったおみくじ</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.8.2/css/bulma.min.css" /> <link href="./css/style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="root"></div> <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/classnames/2.2.6/index.min.js"></script> <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script> <script type="text/babel"> const TodoApp = () => { const point = Math.random(); const [question,setText] = React.useState('?'); React.useEffect(()=>{ onClick(); },[question]); const onClick = () => { if(point <= 0.3 && point >= 0.1) { setText('大吉'); } if(point >= 0.31 && point < 0.5) { setText('中吉'); } if(point > 0.51 && point < 0.99){ setText('凶'); } } return( <div className="wrap"> <h2>おみくじ</h2> <div id="btn" onClick={onClick}>{question}</div> </div> ); }; const root = document.getElementById('root'); ReactDOM.render(<TodoApp />, root); </script> </body> </html>

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

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

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

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

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

uheiuhei

2021/02/06 07:02

回答ありがとうございます。 useEffectを取ると一度は変わるのですがクリックするたびに変えることができません。
hoshi-takanori

2021/02/06 07:18

const point = Math.random(); を const onClick = () => { の次の行に持ってくると良いかも。
uheiuhei

2021/02/06 07:24

回答ありがとうございます。 クリックするとテキストは変わりますが最初の状態が?ではなく大吉、中吉、凶のどれかになります。
guest

回答1

0

追記・修正依頼の箇所で既に答えは出ていますが・・・
以下でどうでしょうか?

js

1const TodoApp = () => { 2 3 const [question,setText] = React.useState('?'); 4 5 // useEffectは削除 6 7 const onClick = () => { 8 // Math.random()をonClick内に移動 9 const point = Math.random(); 10 if(point <= 0.3 && point >= 0.1) { 11 setText('大吉'); 12 } 13 if(point >= 0.31 && point < 0.5) { 14 setText('中吉'); 15 } 16 if(point > 0.51 && point < 0.99){ 17 setText('凶'); 18 } 19 } 20 21 return( 22 <div className="wrap"> 23 <h2>おみくじ</h2> 24 <div id="btn" style={{color: "red"}} onClick={onClick}>{question}</div> 25 </div> 26 ); 27 };

投稿2021/03/04 05:28

nekoniki

総合スコア2411

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問