Tôi đang cố tách riêng một thành phần trình bày khỏi thành phần vùng chứa. Tôi có một số SitesTable
và SitesTableContainer
. Vùng chứa chịu trách nhiệm kích hoạt các tác vụ redux để tìm nạp các trang web phù hợp dựa trên người dùng hiện tại. Vấn đề là người dùng hiện tại được tìm nạp không đồng bộ, sau khi thành phần vùng chứa được hiển thị ban đầu. Điều này có nghĩa là thành phần vùng chứa không biết rằng nó cần phải thực thi lại mã trong hàm componentDidMount
của nó, sẽ cập nhật dữ liệu để gửi đến SitesTable
. Tôi nghĩ rằng tôi cần phải trở lại thành phần container khi một trong những thay đổi đạo cụ (người dùng) của nó. Làm thế nào để tôi làm điều này một cách chính xác?thành phần phản ứng lại khi prop thay đổi
class SitesTableContainer extends React.Component {
static get propTypes() {
return {
sites: React.PropTypes.object,
user: React.PropTypes.object,
isManager: React.PropTypes.boolean
}
}
componentDidMount() {
if (this.props.isManager) {
this.props.dispatch(actions.fetchAllSites())
} else {
const currentUserId = this.props.user.get('id')
this.props.dispatch(actions.fetchUsersSites(currentUserId))
}
}
render() {
return <SitesTable sites={this.props.sites}/>
}
}
function mapStateToProps(state) {
const user = userUtils.getCurrentUser(state)
return {
sites: state.get('sites'),
user,
isManager: userUtils.isManager(user)
}
}
export default connect(mapStateToProps)(SitesTableContainer);
bạn có một số chức năng khác có sẵn, như componentDidUpdate, hoặc có lẽ là một bạn đang tìm kiếm, componentWillReceiveProps (nextProps) nếu bạn muốn bắn một cái gì đó khi các đạo cụ thay đổi – thsorens
Tại sao bạn cần phải kết xuất lại SitesTable nếu nó không thay đổi đạo cụ của nó? – QoP
@QoP các hành động được gửi đi trong 'componentDidMount' sẽ thay đổi nút' sites' trong trạng thái ứng dụng, được chuyển vào 'SitesTable'. Nút 'sites' của SitesStable sẽ thay đổi. – David