Реакция - Как предотвратить обновление <a href> - PullRequest
0 голосов
/ 28 июня 2018

У меня есть ссылка на другой компонент без сохранения состояния. У меня есть прослушиватель onClick, который вызывает метод, который вызывает e.preventDefault (), но это просто делает ссылку нигде при нажатии.

constructor(props, context) {
    super(props, context);
    this.preventRefresh = this.preventRefresh.bind(this);
}

<a href={/components/Button'} onClick={this.preventRefresh}>{n.componentName}</a>

preventRefresh(e) {
    e.preventDefault();
}

Таким образом, нажатие не делает ничего. Как я могу предотвратить перезагрузку страницы?

1 Ответ

0 голосов
/ 28 июня 2018

В React это не работает:

<a href={/components/Button'} onClick={this.preventRefresh}>{n.componentName}</a>

Вы не можете установить атрибут href для компонента (компонент не является URL)

Если вы хотите создать навигационную ссылку, вы должны использовать response-router-dom (если вы работаете для браузеров):

Кулак, вы должны установить его:

npm install --save react-router-dom

Тогда вы можете использовать его, проверьте официальный пример:

import React from "react";
import { BrowserRouter as Router, Route, Link } from "react-router-dom";

const BasicExample = () => (
  <Router>
    <div>
      <ul>
        <li>
          <Link to="/">Home</Link>
        </li>
        <li>
          <Link to="/about">About</Link>
        </li>
        <li>
          <Link to="/topics">Topics</Link>
        </li>
      </ul>

      <hr />

      <Route exact path="/" component={Home} />
      <Route path="/about" component={About} />
      <Route path="/topics" component={Topics} />
    </div>
  </Router>
);

const Home = () => (
  <div>
    <h2>Home</h2>
  </div>
);

const About = () => (
  <div>
    <h2>About</h2>
  </div>
);

const Topics = ({ match }) => (
  <div>
    <h2>Topics</h2>
    <ul>
      <li>
        <Link to={`${match.url}/rendering`}>Rendering with React</Link>
      </li>
      <li>
        <Link to={`${match.url}/components`}>Components</Link>
      </li>
      <li>
        <Link to={`${match.url}/props-v-state`}>Props v. State</Link>
      </li>
    </ul>

    <Route path={`${match.url}/:topicId`} component={Topic} />
    <Route
      exact
      path={match.url}
      render={() => <h3>Please select a topic.</h3>}
    />
  </div>
);

const Topic = ({ match }) => (
  <div>
    <h3>{match.params.topicId}</h3>
  </div>
);

export default BasicExample;

И проверьте документы здесь

...