#実現したいこと
質問を見て下さってありがとうございます。
formからデータを受け取って、配列に追加、setStateして、一覧表示したいです。
#問題
formから取得できるはずのデータが取得できず、undefinedになってしまいます。console.log(event.target.value)
が未定義に....
#実際のコード
練習で作っているので、一つのファイルにまとめて書いています。
見やすいようにコメントをつけました。
js
1import React from "react"; 2import ReactDOM from "react-dom"; 3 4import "./styles.css"; 5 6// form - ここにstateをもたせるべきか 7class TodoInput extends React.Component { 8 render() { 9 return ( 10 <> 11 <input name="title" type="text" placeholder="タイトルを入力" /> 12 <br /> 13 <textarea name="description" type="text" placeholder="内容を入力" /> 14 <br /> 15 <button onClick={this.props.handleSubmit}>追加</button> 16 </> 17 ); 18 } 19} 20 21// todoの一つの要素を表すコンポーネント 22const TodoItem = props => { 23 return ( 24 <> 25 <li>{props.title}</li> 26 <li>{props.description}</li> 27 </> 28 ); 29}; 30 31// データを受けて一覧表示させている 32class TodoList extends React.Component { 33 render() { 34 const list = this.props.tasks.map(task => { 35 return <TodoItem {...task} key={task.id} />; 36 }); 37 return ( 38 <> 39 <ul>{list}</ul> 40 </> 41 ); 42 } 43} 44 45// 親コンポーネント、stateをここに固めたい。 46// formで入力した情報をクリックしたらsetStateしたい。 47class App extends React.Component { 48 constructor() { 49 super(); 50 this.state = { 51 tasks: [], 52 uniqueId: 1 53 }; 54 } 55 56 handleClick(e) { 57 // 入力情報がeventに反映されていない 58 const newTitle = e.target.title.value; 59 const newDescription = e.target.description.value; 60 const newUniqueId = this.state.uniqueId + 1; 61 const newTasks = this.state.tasks.slice(); 62 63 newTasks.push({ 64 title: newTitle, 65 description: newDescription, 66 id: newUniqueId 67 }); 68 69 this.setState({ newTasks }); 70 71 e.target.title.value = ""; 72 e.target.description.value = ""; 73 } 74 75 resetTodo = () => { 76 this.setState({ 77 tasks: [] 78 }); 79 }; 80 81 render() { 82 return ( 83 <> 84 <p>Todo App</p> 85 <button onClick={this.resetTodo}>一括削除</button> 86 <br /> 87 <TodoInput handleSubmit={this.handleClick.bind(this)} /> 88 <TodoList tasks={this.state.tasks} /> 89 </> 90 ); 91 } 92} 93 94const rootElement = document.getElementById("root"); 95ReactDOM.render(<App />, rootElement); 96
#どうかご回答お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/07 00:06
2019/01/07 00:58