URL更改时组件不会更改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL更改时组件不会更改相关的知识,希望对你有一定的参考价值。

我正在处理一个问题,我的链接组件将更改URL,但除非我手动刷新整个页面,否则我的组件不会更改。

class App extends Component {
  constructor(props){
    super(props);
    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(e){
      e.preventDefault();
      this.props.changeValue(e.target.value)
    }

  render() {
    return (
      <div >
        <Link to='/'><Header /></ Link>
        <SearchBar
          value={this.props.value}
          handleChange={this.handleChange}/>

          <Switch >

          <Route exact path='/' render= { () => <ItemListContainer
          items={this.props.items} value={this.props.value}/>} />

          <Route exact path='/:id' render= {(props)=>
             <Item id= {props.match.params.id}
             details={this.props.items[props.match.params.id]}/>} />


          </ Switch >



      </div>
    );
  }
}
答案

所以我意识到我必须使用withRouter,因为渲染的组件不是Route组件的子组件。

import {withRouter} from 'react-router'

class App extends Component {
  constructor(props){
    super(props);
    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(e){
      e.preventDefault();
      this.props.changeValue(e.target.value)
    }

  render() {
    return (
      <div >
        <Link to='/'><Header /></ Link>
        <SearchBar
          value={this.props.value}
          handleChange={this.handleChange}/>

          <Switch >

          <Route exact path ='/' render= { () => <ItemListContainer
          items={this.props.items} value={this.props.value}/>} />

          <Route path='/:id' render= {(props)=>
             <Item id= {props.match.params.id}
             details={this.props.items[props.match.params.id]}/>} />


          </ Switch >



      </div>
    );
  }
}



const mapStateToProps = (state) => {
  return {
    items: state.list.items,
    value: state.searchbar.value };
};

const mapDispathToProps = (dispatch) => {
  return{
    changeValue: (data) => dispatch(actions.changeValue(data))
  }
}



export default withRouter(connect(mapStateToProps, mapDispathToProps)(App))

以上是关于URL更改时组件不会更改的主要内容,如果未能解决你的问题,请参考以下文章

使用nextjs切换页面时如何只更改一个组件?

状态更改时 React 组件未更新

history.push 正在更改 url 但未在反应中呈现组件

React 不会在路由参数更改或查询更改时重新加载组件数据

如果没有在 URL 更改上重新加载页面,React 不会呈现

在 Safari 中状态更改后,React 组件不会重新呈现