javascript - 如何从另一个表单组件更新书籍列表?
问题描述
大家好,我有点新反应,我正在尝试关于某种图书库的教程。我有一个这样的AddNewBook
组件form
:
function AddNewBook(){
const [name, setName] = useState("");
const handleChange = e => setName(e.target.value);
return (
<input name="book-name" onChange={handleChange} />
)
}
我还有另一个组件,我展示了这样的书:
function BooksList(){
const [books, setBooks] = useState([]);
return (books?.map((book, i) => <div key={i}>{book.name}</div>))
}
我有这样的App.js
组件:
function App(){
return (
<div>
<AddNewBook />
<BooksList />
</div>
);
}
我的问题是如何booksList
以最佳实践方式更新。有可能我以后可能会扩展组件并在此周围有更多组件。
解决方案
您应该将 bookList 状态提升到 AddNewBook 和 BooksList 的父组件。然后将必要的东西作为道具传递给组件。
function App(){
const [books, setBooks] = useState([]);
function addBook(bookName) {
setBooks([...books, { name: bookName }]);
}
return (
<div>
<AddNewBook onAddBook={addBook} />
<BooksList books={books} />
</div>
);
}
function BooksList({ books }){
return (books?.map((book, i) => <div key={i}>{book.name}</div>))
}
function AddNewBook({ onAddBook }){
const [name, setName] = useState("");
const handleChange = e => setName(e.target.value);
return (
<div>
<input name="book-name" value={name} onChange={handleChange} />
<button onClick={() => onAddBook(name)}>Add Book</button>
</div>
)
}
推荐阅读
- spring - 如何处理spring boot stomp websocket订阅端点以授权用户
- javascript - 我们如何仅从 localStorage 数组中删除一个值?
- .htaccess - htaccess rewriteCond 被忽略
- algorithm - 在无向加权图中找到“最公平”的交汇点
- sass - 将相同的样式应用于父级和嵌套的子级
- excel-formula - 有没有办法在不单独选择每一列的情况下在 Excel 中跨行相乘?
- google-chrome - 使用 Linkedin 按钮申请不适用于 Chrome 80?
- javascript - 如何使用 JavaScript 获取给定周数的日期的天数
- azure - MySql 管理员用户失去了权限
- apache-kafka - 如何管理春季批处理作业中使用的KafkaItemReader中的偏移量,以防在读取消息中发生任何异常