反应路由器开放模式

时间:2018-08-13 11:33:20

标签: reactjs redux react-router react-redux redux-router

我是新来的反应世界。我有一个关于反应路由器的问题。以下是我的App组件。

class App extends React.PureComponent {
  render() {
    return (
      <div>
        <Switch>
          <Route exact path="/" component={HomePage} />
          <Route exact path="/callback" component={CallbackPage} />
          <Route exact path="/list" component={List} />
          <Route component={NotFoundPage} />
        </Switch>
      </div>
    );
  }
}
export default App;

我的列表类如下:

export class List extends React.PureComponent {
  constructor(props) {
    super(props);

    this.state = {
      isOpen: false,
    };

    this.depositHandleToggle = this.depositHandleToggle.bind(this);
  }
  depositHandleToggle = () => {
    this.props.dispatch(push(`${this.props.match.url}/deposit`));
  }
  render() {
    const { match } = this.props;
    return (
      <div>
      <Route path={`${match.url}/deposit`} component={Modal} />
        <button onClick={this.depositHandleToggle}>Open Modal</button>  
      </div>
    );
  }
}
export default List;

所以我的问题是:当我单击列表容器中的按钮时,为什么我的路由器找不到此URL'localhost:xxx / list / deposit'?它呈现了App组件,但从未返回到List组件。列表容器中是否可以包含自定义路由?难道我做错了什么?请有人帮我解决这个问题。

希望您能理解我的问题。提前致谢。

答案:

我找到了答案,问题出在我的App组件列表路由中。我有'exact'关键字,这就是为什么列表组件内部的路由不起作用的原因。遵循方式是正确的方式。

<Route path="/list" component={List} />

我希望这会对某人有所帮助。

1 个答案:

答案 0 :(得分:1)

import { Link } from 'react-router-dom';
class App extends React.PureComponent {
  render() {
    return (
      <div>
        <Switch>
          <Route exact path="/" component={HomePage} />
          <Route exact path="/callback" component={CallbackPage} />
          <Route exact path="/list" component={List} />
          <Route exact path="/list/deposit" component={Modal} />
          <Route component={NotFoundPage} />
        </Switch>
      </div>
    );
  }
}
export default App;

export class List extends React.PureComponent {
  constructor(props) {
    super(props);
  }

  render() {
    const { match } = this.props;
    return (
      <div>
      <Link to={'/deposit'}>Open Modal</Link> 
    );
  }
}
export default List;

在该组件中,您应该处理模式打开关闭。