Reactでtodoアプリを作成しています。
追加機能と削除機能は実装できたのですが、編集機能に手こずっています。
toggleを付けてクリックした時にItemか、Inputタグが出てそこで編集する様にしています。
このInputに入力したテキストが表示される様にしたいのですが、EditFormからAppに渡されたvalueをどうやって処理すれば良いのかでつまづいています!
#####イベント実行時のエラー
error
1TypeError: Cannot read property 'value' of undefined
###コード
上から親子関係になっています
App
1import React, { useState } from "react"; 2import Form from "./Form"; 3import List from "./List"; 4 5const App = () => { 6 const [todos, setTodo] = useState(["スキップ", "ジャンプ", "しゃがむ"]); 7 const addTodos = text => { 8 if (!text) { 9 return; 10 } 11 const newTodos=[...todos, text]; 12 setTodo(newTodos); 13 }; 14 const removeTodos= todo =>{ 15 setTodo(todos.filter(e=>e !== todo)) 16 } 17 const changeText=(value)=>{ 18 setTodo(e=>e.target.value) 19 } 20 return ( 21 <div> 22 <Form addTodos={addTodos}/> 23 <List todos={todos} removeTodos={removeTodos} changeText={changeText}/> 24 </div> 25 ); 26}; 27 28export default App; 29
List
1import React from "react"; 2import Item from "./Item"; 3const List = props => { 4 const todos = props.todos.map((todo, i) => { 5 return ( 6 <Item 7 key={i} 8 desc={todo} 9 remove={props.removeTodos} 10 changeText={props.changeText} 11 /> 12 ); 13 }); 14 return <ol>{todos}</ol>; 15}; 16export default List; 17
Item
1import React, { useState } from "react"; 2import EditForm from "./EditForm"; 3const Item = props => { 4 const [isDone, setIsDone] = useState(false); 5 const toggleIsDone = () => setIsDone(!isDone); 6 const buttonText = isDone ? "戻す" : "完了"; 7 const handleClick = () => props.remove(props.desc); 8 const [editIt, editIsDone] = useState(false); 9 const toggleEditForm = () => editIsDone(!editIt); 10 const changeText = props.changeText; 11 return ( 12 <li> 13 {editIt ? <EditForm changeText={changeText} /> : <p>props.desc</p>} 14 <button onClick={toggleIsDone}>{buttonText}</button> 15 <button onClick={handleClick}>削除</button> 16 <button onClick={toggleEditForm}>編集</button> 17 </li> 18 ); 19}; 20 21export default Item; 22
EditForm
1import React, { useState } from "react"; 2 3const EditForm = props => { 4 const [value, setValue] = useState(""); 5 const handleChange = () => props.changeText(value); 6 return ( 7 <form action=""> 8 <input 9 type="text" 10 value={value} 11 placeholder="React編集" 12 onChange={e => setValue(e.target.value)} 13 /> 14 <button type="submit" onClick={handleChange}> 15 実行 16 </button> 17 </form> 18 ); 19}; 20export default EditForm; 21
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/28 06:46
2019/12/28 11:04