【发布时间】:2021-08-07 01:33:15
【问题描述】:
这是我使用反应上下文 API 的简单书单应用程序。我已经为 addBook、removeBook 和整个 Book 状态创建了一个上下文,并提供给其他组件。
当我尝试通过表单添加一本书时,它显示TypeError: Object(...) is not a function
下面是我的书本上下文,我为 addBook、removeBook 和整个 BookState 创建了一个上下文,并将其提供给它的包装子组件
BookContext.js
import React, { createContext, useState } from 'react';
import {uuid} from 'uuid/dist/v1';
export const BookContext = createContext();
const BookContextProvider = ({ children }) => {
const [books, setBooks] = useState([
{ id: 1, title: 'name of wind', author: 'Elizabath' },
{ id: 2, title: 'the narrow bridge', author: 'Mc clary' },
]);
const addBook = (title, author) => {
setBooks([...books, { id: uuid(),title, author }])
};
const removeBook = (id) => {
setBooks(books.filter((book) => book.id !== id))
};
return (
<BookContext.Provider
value={{ books, addBook, removeBook }}
>
{children}
</BookContext.Provider>
);
};
export default BookContextProvider;
下面是我的 bookForm.js 文件,我在其中使用了提供者的上下文并从中解构了 addBook BookForm.js
import React, { useContext, useState } from 'react';
import { BookContext } from '../Contexts/BookContext';
function BookForm() {
const { addBook } = useContext(BookContext);
const [title, setTitle] = useState('');
const [author, setAuthor] = useState('');
const handleSubmit = (e) => {
e.preventDefault();
addBook(title, author)
setTitle('')
setAuthor('')
};
return (
<form onSubmit={handleSubmit}>
<input
type="text"
placeholder="Book Name"
value={title}
onChange={(e) => setTitle(e.target.value)}
required
/>
<input
type="text"
placeholder="Author Name"
value={author}
onChange={(e) => setAuthor(e.target.value)}
required
/>
<input type="submit" value="add Book" />
</form>
);
}
export default BookForm;
【问题讨论】:
标签: javascript reactjs react-hooks javascript-objects react-context