구성 요소 래퍼 및 하위 함수를 호출하는 자식 구성 요소가 무한 렌더링 루프를 만들었습니다.),하지만이 구성 요소가 다시 렌더링되어야하는 이유는 모르겠다. 왜냐하면 소도구가 변경되지 않기 때문이다.ReactJS + Redux : (기능) 구성 요소 래퍼 + 디스패치 (상태) 하위 구성 요소가있는 무한한 렌더링 루프 구성 요소
래퍼 :
export default function(ComposedComponent){
class Authenticate extends Component {
componentWillMount(){
//If not logged in
if (!this.props.loggedIn){
this.context.router.history.replace({ pathname: '/login' });
}
console.log("Mount parent");
}
render(){
return(
<ComposedComponent {...this.props} />
);
}
}
Authenticate.propTypes = {
loggedIn: PropTypes.bool.isRequired
}
// Provide router in context for redirect
Authenticate.contextTypes = {
router: PropTypes.object.isRequired
}
const mapStateToProps = state => ({
loggedIn: state.user.loggedIn
})
return connect(mapStateToProps)(Authenticate);
}
자식 요소 :
래퍼 경로 App.js에서 (PropsRoute 단지 추가적인 소품 전달) A와 integegrated된다class InternalArea extends Component {
componentDidMount(){
this.props.setTitle(this.props.title);
console.log("Mount child");
}
render(){
return(
<div>
This is an internal area for logged in users.
</div>
);
}
}
const mapDispatchToProps = dispatch => bindActionCreators({
setTitle
}, dispatch)
export default connect(
null,
mapDispatchToProps
)(InternalArea);
:
<PropsRoute exact path="/internal-area" component={requireAuth(InternalArea)} title="Internal Area" />
분리 자식 구성 요소의 this.props.setTitle(this.props.title);
은 루프 오류를 해결하지만이를 디스패치해야합니다. 이자형. 아니면 내가 옮겨야 하나? 왜 그것이 소품을 변경합니까?