// useReducer 实现 todoList
import React,{ useReducer,useRef } from 'react'
import './index.less'
function todoList() {
const inputRef = useRef();
/*
https://react.docschina.org/docs/hooks-reference.html?#usereducer
useState 的替代方案。
它接收一个形如 (state, action) => newState 的 reducer,并返回当前的 state 以及与其配套的 dispatch 方法。
(如果你熟悉 Redux 的话,就已经知道它如何工作了。)
*/
const [items, dispatch] = useReducer((state,action) => {
switch(action.type){
case 'add':
return [
...state,
{
id:state.length,
name:action.name
}
]
case 'remove':
return state.filter((_,index) => index != action.index)
case 'clear':
return [];
default:
return state;
}
},[])
function handleSubmit(){
dispatch({
type:'add',
name:inputRef.current.value
});
inputRef.current.value = '';
}
return (
<>
<div>
<input ref={inputRef}/>
<button onClick={() => handleSubmit()}>添加</button>
<button className="is-danger" onClick={() => dispatch({type:'clear'})}>清空</button>
</div>
<ul>
{items.map((item,index) => (
<li key={item.id}>
{item.name}
<button onClick={() => dispatch({type:'remove',index})}>删除</button>
</li>
))}
</ul>
</>
)
}
export default todoList;