【发布时间】:2018-03-14 09:04:51
【问题描述】:
我在React 有一个应用程序(Udacity 中的项目),它根据以下类别在我的书架上显示书籍:正在阅读、想阅读和阅读。每次我将类别从想要阅读更改为当前阅读时,这本书都会移动到正确的类别,在这种情况下它将是当前阅读。我的代码适用于这个没有问题。但是,您也可以从可以移动到书架的庞大图书库中进行搜索,默认情况下类别为“无”,尽管您可以将书架中的现有图书作为搜索的一部分(除了主图书馆的图书)。现在,我的问题是,如果我从 None 移动到 Want To Read 类别,例如,我的 UI 在单击返回按钮后不会改变主页(即 App.js)。但是,当我这样做时,主要是更改类别,我没有问题。此外,我在 App.js 中更新书架的功能在调用时不会在控制台中显示任何错误。
我有以下组件:
App
|
|--BooksSearch
|--BooksList
| |--BookShelf
|--BooksSearchPage
|--BookShelf
BooksList 和 BooksSearch 分别在主页(即 App.js)中显示书籍和搜索按钮。 BooksSearchPage 允许用户从图书馆搜索书籍以移入书架。 BookShelf 显示书籍列表,无论它们是在书架上还是在图书馆里。
这是我的 App.js
class App extends React.Component {
state = {
mybooks : [],
showSearchPage: false
}
componentDidMount() {
BooksAPI.getAll().then( (mybooks)=> {
this.setState({mybooks})
})}
toCamelShelf(Shelf) {
if (Shelf==="currentlyreading") return "currentlyReading"
if (Shelf==="wanttoread") return "wantToRead"
return Shelf
}
updateBookShelf = (mybook, shelf) => {
shelf=this.toCamelShelf(shelf)
BooksAPI.update(mybook, shelf).then(
this.setState((state)=>({
mybooks: state.mybooks.map((bk)=>bk.id === mybook.id ?
{...bk, shelf:shelf} : bk)
})))}
render() {
return (
<div className="app">
{this.state.showSearchPage ? (
<Route path='/search' render={({history})=>(
<BooksSearchPage mybooks={this.state.mybooks} onSetSearchPage={
()=>{ this.setState({showSearchPage:false});
history.push("/");
}}
onUpdateBookShelf={this.updateBookShelf}
/>
)} />
) : (
<Route exact path='/' render={()=>(
<div className="list-books">
<div className="list-books-title">
<h1>My Reads</h1>
</div>
<BooksList mybooks={this.state.mybooks}
onUpdateBookShelf={this.updateBookShelf}/>
<BooksSearch onSetSearchPage={()=>this.setState({showSearchPage:true})}/>
</div>
)} />
)}
</div>
)
}
}
export default App
由于代码太长,我在 Github 中包含了我的 repo。我是 ReactJS 的新手,过去 3 天一直在调试这个问题,但无济于事。
【问题讨论】:
标签: javascript reactjs ecmascript-6 react-router