はじめに
- 前回、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>
)
}
実行結果