0

我刚开始使用超HTML。我正在构建一个需要路由的小应用程序,所以我将它与 hyperhtml-app 结合使用。

我正在尝试在视图上设置点击处理程序以处理对锚元素的点击并让它们与路由器一起导航。以下工作,但它似乎令人费解,我认为我错过了更好的方法来做到这一点。你能推荐一个更好的方法吗?

import hyper from 'hyperhtml';
import hyperApp from 'hyperhtml-app';

const app = hyperApp();

class Welcome extends hyper.Component {
  render() {
    return this.html`
      <h1>Welcome</h1>
      <a href="/settings" onclick=${this}>settings</a>
    `;
  }

  onclick(e) {
    if (e.target instanceof HTMLAnchorElement) {
      e.preventDefault();
      app.navigate(e.target.attributes.href.value);
    }
  }
}

class Settings extends hyper.Component {
  render() {
    return this.html`<h1>Settings</h1>`;
  }
}

app.get('/', () => hyper(document.body)`${new Welcome()}`);

app.get('/settings', () => hyper(document.body)`${new Settings()}`);

app.navigate('/');
4

1 回答 1

3

他们路由器的目的是为您处理导航。

实际上,仅当您不希望路由器工作时才需要 preventDefault 。

我创建了一个Code Pen 示例,它显示了您完全相同的代码,甚至根本不需要点击。

最后要注意的是,如果您想保留前一页的状态,您可能应该处理它们一次,然后在每次渲染时重复使用它们。

const page = {
  welcome: new Welcome,
  settings: new Settings
};

app.get('/', () => hyper(document.body)`${page.welcome}`);

app.get('/settings', () => hyper(document.body)`${page.settings}`);

如果您有任何其他问题,请随时提出。

问候

于 2017-09-02T12:50:17.627 回答