2017-09-29 11 views
2

고급 필터 구성 요소를 사용하여 사용자가 다른 유형의 필터와 링크를 공유 할 수 있도록 URL에 검색어 매개 변수를 추가합니다.반응 라우터 4가 검색어 매개 변수로 URL을 업데이트하지 않습니다.

구성 요소를 withRouter()으로 내보낼 때 모든 것이 합법적 인 것 같습니다. 구성 요소 소품에 내역이 삽입됩니다.

this.props.history.push({ 
     pathname: this.props.history.location.pathname, 
     query: { tags: selectedTags } 
    }); 

그것이 this.props.history의 상태를 변경 않으며, 내 쿼리가 존재 볼 수 있지만 브라우저에서 URL이 변경되지 않습니다 나는이 코드 조각을 호출하지만 때. 내가 뭔가 잘못하고 있는거야?

답변

0

동일한 상황이 발생했습니다. 내 솔루션은 pushState() 브라우저의 기록 API를 브라우저의 URL을 변경할 수있는 방법을 사용하는 것입니다. 페이지 콘텐츠를 변경하는 측면에서 React의 setState() 메소드를 사용합니다.

0

당신은 당신의 코드가 있어야한다, 잘못 사용하고 있습니다 :

this.props.history.push({ 
     pathname: this.props.history.location.pathname, 
     search: `?tags=${ selectedTags }` 
    }); 

당신은 탐색에 대한 자세한 내용을보실 수 있습니다 : https://github.com/ReactTraining/history#navigation

+0

아, 감사합니다. 그런데 왜 이것이 이전 상태를 표시합니까? 만약''search :'? tags = $ {selectedTags}'를 누르면 행동을 수행 할 때 처음으로 나타나지 않을 것입니다. params가 다른 검색어를 추가하면'search :'? cars = $ {selectedTags}'라고 말하면 그 URL에'? tags' 만 표시됩니다. 하나의 상태 지연이있는 것처럼 보입니다. – Xeperis

+0

'selectedTags'에는 어떤 값이 있습니까? – imcvampire

+0

나는 문제를 알아 냈다 : 두 개의 redux 동작이 동시에'react-router'의 위치 변경 중 하나와 동시에 해고되었다. 이것은 인터넷에서 막연하게 논의되는 다음 문제, 즉 경로 변경을 유발시키지 않고'search' 문자열을 바꾸는 것에 나를 데려다 준다. 이것의 배경은 많은 호출을하는 것이 비싸고 UX의 관점에서 응답이없는 일종의 데이터 마이닝 WEB APP에 대한 공유 가능한 링크를 구축하는 것입니다. – Xeperis