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

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

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

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

React.js

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

Q&A

1回答

1449閲覧

buttonタグの中にonClickイベントを表示させたい

tttniaeefe

総合スコア13

onclick

onclickとはユーザーのクリック処理を指します。これは"onmousedown"(押下)と"onmouseup"(押上)の二つの事象の組み合わせです

イベントハンドラ

マウスのクリックなどの特定の事象(イベント)が発生した時に実行される処理のことをイベントハンドラと呼びます。

React.js

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

0グッド

0クリップ

投稿2021/12/22 08:44

編集2021/12/23 04:42

React(createReactApp使っていない), typeScriptを用いて環境構築しています。

indexでクリックボタンを表示し、アラートを出すシンプルなコードを記述していますが、
buttonタグの中にonClickが表示されていないので、クリックしてもイベントが発生しません。
editor,ブラウザのコンソール上にエラーは表示されておりません。

以下のようなコードを作成しています。

index

1import React from 'react'; 2import ReactDOM from 'react-dom'; 3import App from './app'; 4 5ReactDOM.render( 6 <React.StrictMode> 7 <App /> 8 </React.StrictMode>, 9 document.getElementById('container') 10);

app

1import React from 'react'; 2 3const App = () => { 4 const clickMe = () => { 5 alert('test'); 6 }; 7 8 return ( 9 <> 10 <p>Hello World</p> 11 <button onClick={clickMe}>clickMe</button> 12 </> 13 ); 14}; 15export default App; 16

ブラウザ上ではbuttonタグは以下のように表示されています。

<button>clickMe</button>

補足情報(FW/ツールのバージョンなど)

構築手順

nodeインストール(v16)

--パッケージの初期化--------------------------------------------
yarn init

--パッケージのインストール--------------------------------------------
1 yarn add react
2 yarn add react-dom
3 yarn add react-router-dom
4 yarn add styled-components
5 yarn add -D typescript
6 yarn add -D webpack
7 yarn add -D webpack webpack-cli ts-loader
8 yarn add -D eslint
9 yarn add -D prettier
10 yarn add -D @types/react
11 yarn add -D @types/react-dom
12 yarn add -D @types/react-router-dom
13 yarn add -D @types/styled-components

--typescriptの設定--------------------------------------------
14 yarn tsc --init

--eslint,prettierの設定--------------------------------------------
15 yarn eslint --init
16 yarn add eslint-config-prettier
17 yarn add eslint-plugin-prettier

--ビルド--------------------------------------------
18 yarn webpack

※resourcesフォルダ配下にindex.htmlを作成しておく
--ビルドの自動化--------------------------------------------
19 yarn add -D clean-webpack-plugin html-webpack-plugin

--開発環境サーバを導入--------------------------------------------
20 yarn add -D webpack-dev-server
21 yarn webpack-dev-server

webpack

1const path = require('path'); 2const HtmlWebpackPlugin = require('html-webpack-plugin'); 3 4module.exports = { 5 mode: 'development', 6 entry: './src/index.tsx', 7 output: { 8 filename: 'bundle.js', 9 path: path.resolve(__dirname, 'dist'), 10 }, 11 module: { 12 rules: [ 13 { 14 test: /.tsx?$/, 15 use: 'ts-loader', 16 }, 17 ], 18 }, 19 resolve: { 20 extensions: ['.ts', '.tsx', '.js', '.jsx'], 21 }, 22devtool: 'eval-source-map', 23 plugins: [ 24 new HtmlWebpackPlugin({ 25 template: 'resources/index.html', 26 }), 27 ], 28 devServer: { 29 static: path.join(__dirname, 'dist'), 30 compress: true, 31 historyApiFallback: true, 32 open: true, 33 port: 8080, 34 }, 35}; 36

tsconfig

1{ 2 "compilerOptions": { 3 "target": "es5", 4 "lib": [ 5 "DOM", 6 "ES2019" 7 ], 8 "jsx": "react", 9 "module": "commonjs", 10 "esModuleInterop": true, 11 "forceConsistentCasingInFileNames": true, 12 "strict": true, 13 "skipLibCheck": true, 14 }, 15 "files": ["src/index.tsx"] 16} 17

packagejson

1{ 2 "name": "test", 3 "version": "0.0.0", 4 "main": "index.js", 5 "license": "NOLICENCED", 6 "dependencies": { 7 "@material-ui/core": "^4.12.3", 8 "@material-ui/icons": "^4.11.2", 9 "eslint-config-prettier": "^8.3.0", 10 "eslint-plugin-prettier": "^4.0.0", 11 "react": "^17.0.2", 12 "react-dom": "^17.0.2", 13 "react-router-dom": "^6.2.1", 14 "styled-components": "^5.3.3" 15 }, 16 "devDependencies": { 17 "@types/react": "^17.0.37", 18 "@types/react-dom": "^17.0.11", 19 "@types/react-router-dom": "^5.3.2", 20 "@types/styled-components": "^5.1.18", 21 "@typescript-eslint/eslint-plugin": "^5.8.0", 22 "@typescript-eslint/parser": "^5.8.0", 23 "clean-webpack-plugin": "^4.0.0", 24 "eslint": "^7.32.0", 25 "eslint-config-standard": "^16.0.3", 26 "eslint-plugin-import": "^2.25.3", 27 "eslint-plugin-node": "^11.1.0", 28 "eslint-plugin-promise": "^5.2.0", 29 "eslint-plugin-react": "^7.27.1", 30 "html-webpack-plugin": "^5.5.0", 31 "prettier": "^2.5.1", 32 "ts-loader": "^9.2.6", 33 "typescript": "^4.5.4", 34 "webpack": "^5.65.0", 35 "webpack-cli": "^4.9.1", 36 "webpack-dev-server": "^4.7.0" 37 }, 38 "scripts": { 39 "start": "yarn webpack-dev-server" 40 } 41}

dist配下のhtml

indexhtml

1<!DOCTYPE html> 2<html lang="jp"> 3 4<head> 5 <meta charset="UTF-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <title>memo-map</title> 8<script defer src="bundle.js"></script></head> ⇐**ビルド時に追加されている** 9 10<body> 11 <div id="container"></div> 12 <script src="bundle.js"></script> 13</body> 14 15</html>

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

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

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

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

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

FKM

2021/12/22 08:49

開発コンソールでなにかエラー出てますか?
tttniaeefe

2021/12/22 12:00 編集

エラー、警告文も全く出ていません。
hoshi-takanori

2021/12/22 13:08

それで動きましたけど。(「createReactApp使っていない」というのが気になりますが…。)
FKM

2021/12/23 00:11

react-nativeとか使っているのでしょうか?それともSDNでReactをローカルで動かしているのでしょうか?
tttniaeefe

2021/12/23 02:11

windowsからwebpackを用いて動かしています。実際にどのように構築しているのかわからないと思いますので、質問文に設定ファイルなどを追記します。
FKM

2021/12/23 02:29

strictModeを外して、通常設定にしたら動きますか?
tttniaeefe

2021/12/23 02:36

動きませんでした。
FKM

2021/12/23 02:37

インストールされているReactのバージョンはわかりますか?
hoshi-takanori

2021/12/23 03:09

設定ファイルをコピペして動かしてみましたが、ちゃんと動きますね。(macOS の Safari ですが…。) もしかして、localhost で「このページにこれ以上メッセージの作成を許可しない」をチェックしたとか? https://www.pc-helper.tokyo/?p=96 alert を console.log にしてコンソールの出力を確認してみるといいかも。
FKM

2021/12/23 03:10

index.htmlのIDはちゃんとcontainerになっていますか?
tttniaeefe

2021/12/23 04:33

警告文等は特に出ていなかったので問題ないと思います。 containerにしております。気がかりなのが、dist配下のindex.htmlにbundle.jsが2つ存在することです。 headタグの中に<script defer src="bundle.js"></script>、bodyに<script src="bundle.js"></script> </body>があります。
FKM

2021/12/23 04:44 編集

自分もVirtual Box内のreact-nativeで、レイアウト、コンポーネント内でテストしましたが、普通に動きました。そもそもReactが機能しているかuseEffectフックなどで、データのマウントが可能かテストしてみては?
tttniaeefe

2021/12/23 06:38

useEffectはきちんと動いていました。イベントだけが反応しないですね。onclick以外のonchangeなども。
guest

回答1

0

こんな感じで出来ると思います。

react

1<button onClick={() => { onclick(); }}>clickMe</button>

自分は引数をもたせられないかなと検索した際に以下の記事が出てきました。

https://qiita.com/tsuuuuu_san/items/73747c8b6e6e28f6bd23

バックエンド?として動いているはずなのでユーザーが見えるソース上でonClickが出る必要はないです。

別解 こんな感じでもできるようです。

react

1function clickMe() { 2 alert("Hello"); 3}

react

1<button onClick={clickMe}>Sign in with Google</button>

投稿2021/12/22 09:14

編集2021/12/22 09:19
zundaa

総合スコア101

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

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

tttniaeefe

2021/12/22 11:53

回答ありがとうございます。いずれの書き方も試しましたが、動きませんでした。
zundaa

2021/12/23 00:04

もしかしたら基本構成が崩れてしまっているのかもしれませんね。 createReactAppで新規で別環境で試してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問