import useState useImperativeHandle forwardRef from reactconst Item = props ref = const todoList = id 1 title 学习webapi isDone true const renderList setTodoList = useStatetodoList const
import { useState, useImperativeHandle, forwardRef } from 'react'
const Item = (props, ref) => { const todoList = [ { id: 1, title: '学习webapi', isDone: true, }, ] const [renderList, setTodoList] = useState(todoList) const [arr, setArr] = useState(todoList) useImperativeHandle(ref, () => ({ handleAddList: value => { setTodoList([ { id: renderList.length + 1, title: value, isDone: false, }, ...renderList, ]) }, render: type => { if (type === '全部') { setArr(renderList) } else if (type === '未完成') { setArr(renderList.filter(item => !item.isDone)) } else { setArr(renderList.filter(item => item.isDone)) } }, }))
const toggleStatus = item => { const newList = renderList.map(list => { if (list.id === item.id) list.isDone = !list.isDone return list }) setTodoList(newList) }
const delItem = (id, e) => { e.stopPropagation() const newList = renderList.filter(list => list.id !== id) setTodoList(newList) }
const computedList = () => { if (arr.length) { return arr.map(item => ( <li key={item.id} onClick={() => toggleStatus(item)}> <b className="del" onClick={e => delItem(item.id, e)}> ❌ )) } else { return
return
- {computedList()}
export default forwardRef(Item
原文地址: http://www.cveoy.top/t/topic/ivq9 著作权归作者所有。请勿转载和采集!