Reactjs React Router V4不更新可选参数更改的内容

Reactjs React Router V4不更新可选参数更改的内容,reactjs,react-router,Reactjs,React Router,我是新的反应,我在一个网站的搜索功能的工作。我正在使用CreateReact应用程序库 以下是路线: <BrowserRouter> <App> <Switch> <Route path='/' exact component={Home} /> <Route path='/blah' component={Blah} /> <Rout

我是新的反应,我在一个网站的搜索功能的工作。我正在使用CreateReact应用程序库

以下是路线:

<BrowserRouter>
    <App>
        <Switch>
            <Route path='/' exact component={Home} />
            <Route path='/blah' component={Blah} />
            <Route path='/boop' component={Boop} />
            <Route path="/search/:searchTerm?" component={Search} />
            <Route path="*" component={NotFound} />
        </Switch>
    </App>
</BrowserRouter>
这可以工作并显示/search/test和/search/woo等路径的结果。唯一的问题是当我直接从一个搜索转到另一个搜索时

/search/test->/search/woo更新地址栏中的路径,但不使用新的搜索结果呈现woo页面的内容

在两者之间转到另一条路径可以使其工作。所以/search/test->/boop->/search/woo所有功能都按预期工作

我是不是遗漏了什么?我是否需要以某种方式手动触发,或者可选参数更改是否应该触发组件更新


谢谢

若要将此术语存储在组件的状态中,则需要在每次更改时将状态同步到道具

export default class Search extends Component {
    ...

    componentWillReceiveProps(nextProps) {
      const newSearchTerm = nextProps.match.params.searchTerm
      if(this.state.searchTerm !== newSearchTerm) {
          this.setState(() => ({ searchTerm: newSearchTerm }))
      }
    }

    ...
}
但没有理由这么做。使用
渲染中的
this.props
。可能就这么简单

export default ({ match: { params: { searchTerm } } }) => (
    <div className="Search">
       SEARCH: {searchTerm}
       <SearchResults searchTerm={searchTerm} />
     </div>
)
导出默认值({match:{params:{searchTerm}}})=>(
搜索:{searchTerm}
)

您是否尝试过将searchTerm设置为
componentWillMount()
中的状态而不是构造函数中的状态?
export default class Search extends Component {
    ...

    componentWillReceiveProps(nextProps) {
      const newSearchTerm = nextProps.match.params.searchTerm
      if(this.state.searchTerm !== newSearchTerm) {
          this.setState(() => ({ searchTerm: newSearchTerm }))
      }
    }

    ...
}
export default ({ match: { params: { searchTerm } } }) => (
    <div className="Search">
       SEARCH: {searchTerm}
       <SearchResults searchTerm={searchTerm} />
     </div>
)