フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

簡易版タスク管理機能をRedux Tool Kitで作成してみる②

はじめに

  • 前回、Redux Tool Kitでstoreを作成したので、作成したstoreを利用したコンポーネントを作成してみる

コード

import React from 'react'
import { useSelector } from 'react-redux'
import { selectTasks } from './taskSlice'
import { TaskItem } from './TaskItem'

export const TaskList = () => {
    // useSelectorでstoreに定義しているtasksを取得することができる
    const tasks = useSelector(selectTasks)
    return (
        <div>
            {
                tasks.map((task) => <TaskItem key={task.id} task={task} />)
            }
        </div>
    )
}
import React from 'react'
import { useDispatch } from 'react-redux'
import { doneTask, deleteTask } from './taskSlice'

export const TaskItem = ({ task }) => {
    const dispatch = useDispatch();
    return (
        <div>
            <input type="checkbox" 
                    onClick={()=>dispatch(doneTask(task))}
                    defaultChecked={task.done} />
            <span>{task.title}</span>
            <button onClick={()=>dispatch(deleteTask(task))}>削除</button>
        </div>
    )
}
import React, { useState } from 'react'
import { useDispatch } from "react-redux"
import { createTask } from "./taskSlice"

export const TaskInput = () => {
    const dispatch = useDispatch()
    const [newTitle, setNewTitle] = useState("")
    const handleTitleChange = (e) => {
        setNewTitle(e.target.value)
    }
    const handleSubmit = (e) => {
        e.preventDefault()
        dispatch(createTask(newTitle))
        setNewTitle("");
    }
    return (
        <div>
            <form onSubmit={handleSubmit}>
                <input type="text" 
                  value={newTitle}
                  onChange={handleTitleChange}
                  placeholder="新しいタスクを入力してください"
                />
                <button>追加</button>
            </form>
        </div>
    )
}

実行結果

f:id:PX-WING:20210108084202p:plain