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

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

詳細はこちら
React.js

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

Q&A

解決済

1回答

2545閲覧

Reactでul liを動的に生成したい

butsuli_shine

総合スコア29

React.js

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

0グッド

0クリップ

投稿2021/01/04 06:49

編集2021/01/04 07:17

コード

js

1import React, { useState } from "react"; 2import Form from "./Form"; 3import List from "./List"; 4 5const Todo = () => { 6 const [todoList, setTodoList] = useState([]); //maparray 7 8 const addTodoList = (Content) => { 9 setTodoList(todoList.concat({"content":Content})); 10 }; 11 console.log(todoList) 12 13 const deleteTodoList = (index) => { 14 setTodoList((item) => todoList[index] !== item); 15 }; 16 17 return ( 18 <div className="p-3 mb-2 bg-info text-white"> 19 <Form todos={todoList} addTodoList={addTodoList} /> 20 <List todos={todoList} deleteTodoList={deleteTodoList} /> 21 </div> 22 ); 23}; 24 25export default Todo;

js

1import React, { useState } from "react"; 2 3const Form = (props) => { 4 const [task, setTask] = useState([]); 5 const handleNewTask = (event) => { 6 setTask(event.target.value); 7 }; 8 return ( 9 <div> 10 <form onSubmit={props.addTodoList}> 11 <div className="form-group row"> 12 <label className="col-sm-2 col-form-label">Your todo:</label> 13 <input 14 type="text" 15 className="siimple-input" 16 value={task} 17 onChange={handleNewTask} 18 /> 19   20 <input type="submit" value="Add" className="btn btn-secondary btn-sm" 21 onClick={props.addTodoList}/> 22 </div> 23 </form> 24 </div> 25 ); 26}; 27 28export default Form; 29

js

1import React from "react"; 2let style = { maxWidth: "700px" }; 3 4const List = (props) => { 5 6 const TodoListItems = 7 props.todos.map((todo, index) => { 8 return( 9 <div className="container"> 10 <li 11 key={index} 12 className="list-group-item list-group-item-info" 13 style={style} 14 > 15 {todo.content}{" "} 16 <div className="float-right"> 17 <button type="button" className="btn btn-danger btn-sm" onClick={props.deleteTodoList}> 18 delete 19 </button> 20 </div> 21 </li> 22 </div> 23 ); 24 }) 25 26 return( 27 <ul className="siimple-list"> 28 {TodoListItems} 29 </ul> 30 ) 31 } 32export default List; 33

js

1import React from "react"; 2let style = { maxWidth: "700px" }; 3 4const List = (props) => { 5 6 const TodoListItems = 7 props.todos.map((todo, index) => { 8 return( 9 <div className="container"> 10 <li 11 key={index} 12 className="list-group-item list-group-item-info" 13 style={style} 14 > 15 {todo.content}{" "} 16 <div className="float-right"> 17 <button type="button" className="btn btn-danger btn-sm" onClick={props.deleteTodoList}> 18 delete 19 </button> 20 </div> 21 </li> 22 </div> 23 ); 24 }) 25 26 return( 27 <ul className="siimple-list"> 28 {TodoListItems} 29 </ul> 30 ) 31 } 32export default List; 33

つまづいているところ

  • Formは表示されるのですが、何か入力してサブミットすると、何も映らなくなります。
  • Reactを使ったコードのデバッグはどのようにやるのがいいのでしょうか。

ご教示いただけたら幸いです。

追記

まだpropsの受け渡しなどが理解できていないので自分でもう少し考えてみます

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

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

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

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

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

guest

回答1

0

ベストアンサー

<form> タグの onSubmit イベントは強制的に画面遷移させてしまいます。なので onSubmit は取っちゃいましょう。また送信ボタンも <input> ではなく <button> を使いましょう。

React のデバッグ方法ですが、まずはブラウザで F12 を押して開発者コンソールを開いてみてください。エラーがある場合そこに出ます。

投稿2021/01/04 07:59

A_kirisaki

総合スコア2853

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

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

butsuli_shine

2021/01/04 08:13

ありがとうございます、List表示はできました。 デバッグの方法も教えてくださりありがとうございました。 Javascriptの配列についてもまだ理解できていなかったので、勉強しようと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問