Reduxベース(2):ToDoアプリケーション
結果
コード#コード#
import { createStore } from 'redux'
const form = document.querySelector('form')
const input = document.querySelector('input')
const ul = document.querySelector('ul')
const ADD_TODO = "ADD_TODO"
const DELETE_TODO = "DELETE_TODO"
const addToDo = (text) => {
return {
type: ADD_TODO,
text
}
}
const deleteToDo = (id) => {
return {
type: DELETE_TODO,
id
}
}
// NOT RECOMENDED MUTATION STATE // --- !!
// const reducer = (state = [], { type, text }) => {
// switch (type) {
// case ADD_TODO:
// state.push(text)
// return state
// case DELETE_TODO:
// return []
// default:
// return state
// }
// }
const reducer = (state = [], { type, text, id }) => {
switch (type) {
case ADD_TODO:
return [{ text, id: Date.now() }, ...state ]
case DELETE_TODO:
return state.filter(todo => {
return todo.id !== +id
})
default:
return state
}
} // === @@
const store = createStore(reducer) // --- (1)
const paintoDos = () => {
ul.innerHTML = ''
const toDos = store.getState()
toDos.forEach(toDo => {
const li = document.createElement('li')
li.innerHTML = toDo.text
li.id = toDo.id
const button = document.createElement('button')
button.innerHTML = 'DELETE'
button.addEventListener("click", dispatchDeleteToDo)
li.appendChild(button)
ul.appendChild(li)
})
}
store.subscribe(paintoDos) // --- (2)
const dispatchAddToDo = text => {
store.dispatch(addToDo(text))
} // --- (3)
const dispatchDeleteToDo = e => {
const { id }= e.target.parentNode
store.dispatch(deleteToDo(id))
}
const getInputValue = () => {
const value = input.value
input.value = ''
return value
}
const onSubmit = e => {
e.preventDefault()
const toDo = getInputValue()
dispatchAddToDo(toDo)
}
form.addEventListener("submit", onSubmit) // --- (4)
state
を管理するmodifier
とともにstore
を生成する.state가
を変更するとHTMLも変更できます.modifier
を実行します.addToDo
は、modifier
が要求するパラメータインタフェース(リスト)のように感じられる.人間の誤りを予防し、コードを迅速に把握するためにも、このように書かれています.これにより、addToDo
およびdispatchAddToDo
が分離される.eventListener
を使用してコミットされる場合、input
の値のvalue
を保留中のリストに追加する関数onSumit
が実行される.Reference
この問題について(Reduxベース(2):ToDoアプリケーション), 我々は、より多くの情報をここで見つけました https://velog.io/@shelly/Redux-기초-2-ToDo-Applicationテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol