我正在做一个React项目,其中将从服务器检索书籍列表。每本书都有一个选项,可以设置为不同的书架,例如 1) 当前正在阅读,2) 想要阅读和 3) 根据用户对书籍的体验阅读。每本书都有一个下拉菜单,其中将提到 3 个书架。用户单击下拉列表中的书架后,该书将显示在所选书架上。因此,我能够从 API 检索书籍,但我被困在选择书籍后书籍将被设置为相应书架的地步。
从 API 检索所有书籍的代码:
import React, { Component } from 'react';
class BooksList extends Component {
state={
showSearchPage: false,
books: [],
selectedValue: 'None'
}
handleChange =(e) => {
this.setState({ selectedValue:e.target.value })
}
render() {
return(
{<div className="book-search">
{this.props.books.map( book =>
<div className="book">
<div className="book-top">
<div className="book-cover" style={{ width: 128, height: 193,margin:10, backgroundImage: `url(${book.imageLinks.smallThumbnail})` }}></div>
<div className="book-shelf-changer">
<select
value={this.state.selectedValue}
onChange={this.handleChange}>
<option value="none" disabled> Move to...</option>
<option value="currentlyReading">✔ Currently Reading</option>
<option value="wantToRead"> Want to Read</option>
<option selected="selected" value="read"> Read</option>
<option value="none"> None</option>
</select>
</div>
</div>
<div className="book-title">{book.title}</div>
<div className="book-authors">{book.authors}</div>
<p>{this.state.selectedValue}</p>
</div>
)}
</div>
}
当前读取功能架的代码:
<div className="list-books-content">
<div>
<div className="bookshelf">
<h2 className="bookshelf-title">Currently Reading</h2>
<div className="bookshelf-books">
<ol className="books-grid">
{ this.props.books.map(book =>
<li>
<div className="book">
<div className="book-top">
<div className="book-cover" style={{ width: 128, height: 193, backgroundImage: `url(${book.imageLinks.smallThumbnail})` }}></div>
<div className="book-shelf-changer">
<select
value={this.state.selectedValue}
onChange={this.handleChange}>
<option value="none" disabled> Move to...</option>
<option value="currentlyReading">✔ Currently Reading</option>
<option value="wantToRead"> Want to Read</option>
<option selected="selected" value="read"> Read</option>
<option value="none"> None</option>
</select>
<p>{this.state.selectedValue}</p>
</div>
</div>
<div className="book-title">{this.state.currentlyReadingBooks}</div>
<div className="book-authors">{book.authors}</div>
</div>
</li>
)}
所以我想到的解决方案是:我们是否必须为三个不同的部分创建 3 个书籍数组并将书籍移动到每个部分。谁能帮我解决这个问题。我真的被困住了。我不知道如何进行。
用户从下拉列表中单击书架后,该书将显示在所选书架上
这告诉我,您可能不需要将selectedValue
存储在 react 状态;一旦选择了下拉操作操作,只需"添加"它即可。
所以是的,我认为你描述的是有道理的 - 在反应状态下存储三个单独的书籍数组,然后在您的 handleChange
函数中,将书籍附加到适当的数组中。
(旁注:React 的最佳实践是从你的状态中复制唯一的数组,而不是直接附加/改变它。