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

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

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

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

React.js

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

Q&A

1回答

1512閲覧

React ToDoリスト xボタン押下で完了に移動

hiro_ike

総合スコア48

JavaScript

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

React.js

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

0グッド

0クリップ

投稿2021/08/02 15:43

React, JavaScriptも初心者です。

ToDoリストを作成しており、
新規追加したタスクのXボタンでクリックで
完了したタスクに移動させたいです。

途中まで書いたのですが、
この後は、
完了したタスク用の配列を追加して、
xボタンが押下されたら、そこに格納するようにしたら良いのでしょうか?

アドバイス頂けますと幸いです。

React

1import React, { useState } from "react"; 2 3function ToDoListItem() { 4 const toDoListData = [ 5 { 6 title: "Learn React", 7 completed: true 8 }, 9 { 10 title: "Write more Components", 11 completed: false 12 }, 13 { 14 title: "Add some style", 15 completed: false 16 } 17 ]; 18 19 const [todos, setTodo] = useState(toDoListData); 20 21 const [title, setTitle] = useState(""); 22 23 const handleNewTask = (event) => { 24 setTitle(event.target.value); 25 }; 26 27 const handleSubmit = (event) => { 28 event.preventDefault(); 29 if (title === "") return; 30 setTodo((todos) => [...todos, { title, isCompleted: false }]); 31 setTitle(""); 32 }; 33 34/*ココからちょっとよく分からなくなってきた 35 36const handleCompletedTask = (index) => { 37 event.preventDefault(); 38 return; 39 setTodo((todos) => [...todos, { title, isCompleted: false }]); 40 setTitle(""); 41 }; 42ココまで 43*/ 44 45 const handleRemoveTask = (index) => { 46 const newTodos = [...todos]; 47 newTodos.splice(index, 1); 48 setTodo(newTodos); 49 }; 50 51 52 53 return ( 54 <div> 55 <h1>My To Do List:</h1> 56 <form onSubmit={handleSubmit}> 57 New Item <br />{" "} 58 <input 59 value={title} 60 placeholder="Add New Item" 61 onChange={handleNewTask} 62 /> 63 <br /> 64 </form> 65 To Do Items: 66 <ul> 67 68 {todos.map((todo, index) => ( 69 <li key={index}> 70 {todo.title} <span onClick={() => handleCompletedTask(index)}>X</span> 71 </li> 72 ))} 73 74 </ul> 75 Completed: 76 <ul> 77 {todos.map((todo, index) => ( 78 <li key={index}> 79 {todo.title} <span onClick={() => handleRemoveTask(index)}>X</span> 80 </li> 81 ))} 82 </ul> 83 </div> 84 ); 85} 86 87export default ToDoListItem; 88

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

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

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

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

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

FKM

2021/08/03 01:26

コメントアウトしている部分を実行した場合、どういう挙動を示しますか?
p19ljk

2021/08/03 02:18

「xボタンが押下されたら、そこに格納するようにしたら良いのでしょうか?」 やってみたけどダメだったなら分かりますが、〇〇したら良いでしょうか?のような質問は適切ではない気がします。 まずやってみて、それでダメだったら「〇〇してみたのですがダメでした。どうしたら良いですか?」とか「何が間違っていますか?」のような質問にしたほうが良いと思いますよ!
guest

回答1

0

こんな感じでコンポーネント内に判定フラグをもたせれば、オブジェクトの振り分けができます。

js:todo.js

1//todoリストの制御用コンポーネント。flgは判定用 2const todoList = (flg) =>{ 3 return todos.map((val, idx) =>{ 4 if(val.completed === flg){ 5 return( 6 <li key={idx}> 7 {val.title} <span onClick={() => handleCompletedTask(idx)}>X</span> 8 </li> 9 ) 10 } 11 }) 12} 13 14 return ( 15 <div> 16 <h1>My To Do List:</h1> 17 <form onSubmit={handleSubmit}> 18 New Item <br />{" "} 19 <input 20 value={title} 21 placeholder="Add New Item" 22 onChange={handleNewTask} 23 /> 24 <br /> 25 </form> 26 To Do Items: 27 <ul> 28 {todoList(false)} 29 </ul> 30 Completed: 31 <ul> 32 {todoList(true)} 33 </ul> 34 </div> 35 ); 36 37}

あとはxボタンを押したときに、変数todos内のcompleteのフラグ値を変えて、それを分割代入で同期をとれば、期待通りの動作ができるのではないかと思います。

制御を参考にしたページ
if文はJSXの中で書け

投稿2021/08/03 08:36

編集2021/08/03 08:56
FKM

総合スコア3647

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問