如何使用 React Hooks 编写删除处理函数?
2021-02-07
3900
我正在使用钩子在 React 中创建一个抽认卡应用,但在删除一副抽认卡时遇到了麻烦。我能够在页面上呈现 Bootstrap 卡片,其中包含抽认卡名称、描述、卡片数量和所需的按钮。但是,我无法删除一副卡片,因为我被告知
setFlashcards
不是一个函数。这是我的代码:
App.js
function Layout() {
const [flashcards, setFlashcards] = useState([])
useEffect(() => {
axios
.get('http://localhost:5000/decks?_embed=cards')
.then(res => {
setFlashcards(res.data.map((questionItem, index) => {
return {
id: `${index}-${Date.now()}`,
name: questionItem.name,
description: questionItem.description,
cards: questionItem.cards.length,
}
}))
})
}, [])
return (
<div>
<Header />
<ShowAllDecks flashcards={flashcards} setFlashcards={setFlashcards} />
<NotFound />
</div>
)
}
ShowAllDecks.js
function ShowAllDecks({ flashcards, setFlashcards }) {
return (
<div className='container'>
<button>Create New</button>
{flashcards.map((flashcard) => {
return <Deck flashcards={flashcards} flashcard={flashcard} key={flashcard.id} />
})}
</div>
)
}
Deck.js
function Deck({ flashcard, flashcards, setFlashcards }) {
const deleteHandler = () => {
setFlashcards(flashcards.filter(el => el.id !== flashcard.id))
}
return (
<div className='container'>
<div className='card'>
<div className='card-body'>
<h3 className='card-title'>{flashcard.name}</h3>
<p className='card-text'>{flashcard.description}</p>
<p className='card-text'>{flashcard.cards} cards</p>
<button>View</button>
<button>Study</button>
<button onClick={deleteHandler}>Delete</button>
</div>
</div>
</div>
)
}
一张卡片的卡片组示例:
[
{
'id': 1,
'name': 'A Deck Name'
'description': 'A Deck Description',
'cards': [
{
'id': 1,
'front': 'Front of card',
'back': 'Back of card',
'deckId': 1
}
]
}
]
1个回答
我假设您正在运行呼叫以获取
flashcards
在
app.js
中,因为您要将其传递给其他组件?如果您要经常将道具钻入其他组件,也可能最好使用
上下文
。否则,如果仅用于显示所有甲板,则可以在
alldecks
组件中运行获取。无论如何,我在下面更改了您的代码,将其保存在
app.js
:
app.js
772518841
showaldecks.js
463063735
deck.js
714922571
Joe
2021-02-07