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

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

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

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

React.js

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

Q&A

解決済

1回答

2285閲覧

React 画面初期表示時 function実行されてしまう

bellcrud

総合スコア22

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2019/03/30 06:54

##Reactで画面初期表示時にファンクションが実行される
ReactでonClickイベントハンドラで指定している削除機能ファンクションが、画面初期表示時に実行されてしまいます。
初期表示時に実行されないようにするにはどのようにしたら良いのでしょうか。

####ソース
App.js

import React, {Component} from 'react'; import './App.css'; import Item from './components/ItemList/Item.js'; import axios from 'axios'; import Header from "./components/Header/Header"; const endPoint = process.env.REACT_APP_ENDPOINT + "/items"; class App extends Component { constructor(props) { super(props); this.state = { data: [],//アイテムの複数データ格納変数 keyword: '', id: '', }; //thisがこのクラス自体のことだということを教えておく //全件取得メソッド this.getAllItems = this.getAllItems.bind(this); //アイテム検索メソッド this.itemsSearch = this.itemsSearch.bind(this); this.itemDelete = this.itemDelete.bind(this); } //初期表示全件取得 componentDidMount = () => { this.getAllItems(); } //全件取得メソッド getAllItems = () => { axios({ method: 'GET', url: endPoint, headers: { 'Content-type': 'application/json', } }).then((results) => { if (!('errors' in results)) { this.setState({data: results.data}); } else { //取得できなかった時の処理 } }); }; //アイテム検索メソッド itemsSearch = (keyword) => { axios({ method: 'GET', url: endPoint, params: {name: keyword}, headers: { 'Content-type': 'application/json', } }).then((results) => { //正常に取得できた場合とエラーとなった場合の分岐 if (!('errors' in results)) { this.setState({data: results.data}); } else { //取得できなかった時の処理 } }); }; //アイテム削除メソッド itemDelete = (id) => { axios({ method: 'DELETE', url: endPoint+'/'+id, headers: { 'Content-type': 'application/json', } }).then(() => { this.getAllItems(); }); }; render() { const items = this.state.data.map((item) => { return ( <Item key={item.id} item={item} itemDelete={()=>this.itemDelete(item.id)} /> ); }); return ( <div className="App"> <Header itemsSearch={keyword => this.itemsSearch(keyword)} getAllItems={() => this.getAllItems()} /> <div>{items}</div> </div> ); } } export default App;

ItemDeleteButton.js

import React from 'react'; const ItemDeleteButton = (props) =>{ return ( <button onClick={props.itemDelete(props.id)}> Delete </button> ); } export default ItemDeleteButton;

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

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

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

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

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

guest

回答1

0

ベストアンサー

jsx

1<button onClick={props.itemDelete(props.id)}>

このように書くと、その場でprops.itemDeleteを実行することとなります。簡単には、onClick={() => props.itemDelete(props.id)}と無名関数を1つはさみましょう。

投稿2019/03/30 06:55

maisumakun

総合スコア145183

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

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

bellcrud

2019/03/30 07:15

ありがとうございます! なりほど一旦無名関数を挟まないといけないのですね。。。 これは気がつきませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問