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

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

新規登録して質問してみよう
ただいま回答率
85.47%
React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

React.js

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

Q&A

1回答

130閲覧

【React】ToDoリストの完了ボタンをタップして項目だけ打ち消し線が引かれるようにしたい

_chii

総合スコア50

React Native

React Nativeは、ネイティブモバイルアプリ(iOS/Android)を作成できるJavaScriptフレームワークです。Reactと同じ設計のため、宣言的なコンポーネントでリッチなUIを開発することが可能です。

React.js

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

0グッド

0クリップ

投稿2024/03/18 06:30

編集2024/03/20 10:54

実現したいこと

当該コードはReact Native ですがロジック自体は関係がないためタイトルをReactにさせて頂きました。
現場のコードでは特定の項目のチェックボックス(完了ボタン)をタップしても全ての項目に打ち消し線が引かれてしまう状態ですが、これをタップした項目に適用できるようにしたいです

発生している問題・分からないこと

onPress={handlePress} のhandlePressの引数にindexを使用することは理解できます。
でもそのindexをどのように扱うべきなのか理解することができず...

該当のソースコード

DOMの当該のコード

1 <SwipeListView 2 data={tasks} 3 keyExtractor={(index) => index.toString()} 4 renderItem={({ item }) => ( 5 <View style={styles.taskItem}> 6 <Text style={isPressed ? styles.doneTaskItem : null}>{item}</Text> 7 </View> 8 )} 9 renderHiddenItem={({ index }) => ( 10 <View style={styles.hiddenItemContainer}> 11 <TouchableOpacity style={[styles.taskButton, styles.doneButton]} onPress={handlePress}> 12 <Icon name="done" size={20} color="white" /> 13 </TouchableOpacity> 14 <TouchableOpacity 15 style={[styles.taskButton, styles.deleteButton]} 16 onPress={() => removeTask(index)} 17 > 18 <Icon name="delete" size={20} color="white" /> 19 </TouchableOpacity> 20 </View> 21 )} 22 rightOpenValue={-100} 23 /> 24
const handlePress = () => { setIsPressed(!isPressed); };

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

どのように期待する処理を実現できるかわかりませんでした

補足

特になし

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

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

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

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

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

guest

回答1

0

現在は tasks が string[] 型になっているので、 { title: string, done: boolean }[] 型に変更すると良いと思います。

tsx

1 2 const addTask = () => { 3 if (task.trim() !== '') { 4 setTasks([...tasks, { title: task, done: false }]); 5 setTask(''); 6 } 7 }; 8 9 const markTaskAsDone = (index: number) => { 10 // つまり、 `index` 番目の要素だけ、done プロパティ を true に切り替える 11 setTasks(tasks.map((t, i) => i === index ? { ...t, done: true } : t)) 12 }

投稿2024/03/19 13:17

honey32

総合スコア169

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

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

_chii

2024/03/20 10:54

ありがとうございます。 試してみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問