2017-12-28 31 views
0

나는 리모트 자원이 구성 요소의 기능인 componentDidMount 안에 반입되는 간단한 어플리케이션을 작성했다.React 라우터 매개 변수가 변경되면 강제로 다시 구성 하시겠습니까?

나는 React Router를 사용 중이며 경로가 완전히 변경되면 이전 구성 요소가 잘 마운트 해제 된 다음 새 구성 요소가 마운트됩니다.

사용자가 동일한 경로에 머무르고 있지만 일부 매개 변수 만 변경되는 경우 문제가 발생합니다. 이 경우 구성 요소는 업데이트 만됩니다. 이는 기본 동작입니다. 그러나 이전에는 componentDidMount 만 필요한 모든 하위 구성 요소에서 업데이트를 처리하기가 때로는 어려웠습니다 ...

사용자가 동일한 경로에 머물고 있지만 일부 매개 변수에 머물러있을 때 구성 요소를 강제로 다시 설치할 수있는 방법이 있습니까? 변화하고 있습니까?

감사합니다.

+0

가능한 복제 [구성 요소 반응에 다시 마운트 강제로 어떻게?] (https://stackoverflow.com/questions/35792275/how- to-force-remounting-on-react-components) –

+0

나는 그것이 당신이 찾고있는 해답이 아니라는 것을 알고있다. 그러나 나는 보통 componentWillReceiveProps에서 매개 변수가 변경되었는지 확인하고 componentDidMount에서 실행되는 초기화 코드를 호출한다. ie'(this.props.match.userId! = nextProps.match.userId) {initComponent (nextProps.match.userId);}' – brub

+0

당신은 어떤 버전의 반응 라우터를 가지고 있는지 말할 수 있습니까? – Syberic

답변

1

다음을 수행하십시오.

경로 shoul은 다음과 같습니다. 당신이/영화에 갈 때

<Route path='/movie/:movieId' component={Movie} /> 

는/:

를 movieID
class Movie extends Component { 

loadAllData = (movieID) => { 
    //if you load data 
    this.props.getMovieInfo(movieID); 
    this.props.getMovie_YOUTUBE(movieID); 
    this.props.getMovie_SIMILAR(movieID); 
    } 
    componentDidMount() { 
    this.loadAllData(this.props.match.params.movieId); 
    } 
    componentWillReceiveProps(nextProps){ 
    if(nextProps.match.params.movieId !== this.props.match.params.movieId) { 
     console.log(nextProps); 
     this.loadAllData(nextProps.match.params.movieId); 
    } 
    } 

    render(){ 
    return(... stuff and <Link to={`/movie/${id}`} key={index}>...</Link>) 
    } 
}