Reactjs React Router V4不更新可选参数更改的内容
我是新的反应,我在一个网站的搜索功能的工作。我正在使用CreateReact应用程序库 以下是路线: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
<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>
)