私は、カバーのリストをレンダリングする反応コンポーネントと、リストonClickからブックを削除するボタンを持っています。私はマップの状態を経由して小道具への地図の発送と本棚の情報を使って削除アクションを渡しています。削除アクションは、データベースから本を削除して、私のレデューサーに当たっています。しかし、状態が更新されても、ブックリストコンポーネントは再レンダリングされません(リロードしない限り、削除されたブックは消えません)。削除コンポーネントを強制的に再レンダリングする方法
import React from 'react';
import { Link, withRouter } from 'react-router-dom';
import {CarouselProvider, Slider, Slide, ButtonBack, ButtonNext, Image, Dot} from 'pure-react-carousel';
class BookshelfIndexItem extends React.Component {
constructor(props){
super(props);
}
render() {
return(
<div>
<h3 className='shelf-title'>{this.props.bookshelf.name}</h3>
<CarouselProvider
naturalSlideWidth={135}
naturalSlideHeight={250}
totalSlides={this.props.bookshelf.book_ids.length}
visibleSlides={3}>
<Slider style={{height: '240px', display: 'flex', 'justifyContent': 'space-between'}}>
{this.props.bookshelf.book_ids.map((id, index) =>(<Slide index={index}
key={id} style={{'width': '150px','display': 'flex','alignItems': 'center', 'margin': '0 50px'}}>
<Link to={`/books/${id}`}>
<Image style={{height: '200px', width: '140px'}} src ={this.props.books[id].image_url}></Image>
</Link>
<button style={{height: '35px', 'marginLeft': '55px', 'marginTop': '5px'}}
onClick={() => this.props.deleteBookFromBookshelf({book_id: id, bookshelf_id: this.props.bookshelf.id})}>
X
</button>
</Slide>))}
</Slider>
<div className='slider-button-container'>
<ButtonBack className='slider-button'>back</ButtonBack>
<ButtonNext className='slider-button'>next</ButtonNext>
</div>
</CarouselProvider>
</div>
);
}
}
export default withRouter(BookshelfIndexItem);
私は、このようなComponentWillReceiveProps内のすべての本棚をフェッチするよう、ライフサイクルメソッドのいくつかを試してみましたが、ない変更しました。
店舗に接続されているコンポーネントを表示できますか? – Jaxx
'this.props.bookshelf.book_ids'でマッピングしています。どのようにその配列を作成していますか?正しく更新されていますか? – mduleone
jbuilderビューの一部としてバックエンドにその配列を作成しています。私はそれが正しく更新されていないと思う。私は、ShelfからRemove Bookアクションを受け取った後、レデューサーにそれを更新させようとしています。 –