In Astro habe ich versucht, die Preact-Komponente von Funktion zu Klasse umzuschreiben
P粉006540600
P粉006540600 2024-01-16 23:12:28
0
1
444

Hier ist ein Demo-Repository, das zeigt, wie man Preact mit Astro verwendet.

Ich werde hier nur relevante Codeschnipsel zeigen. In der Astro-Seitendatei wird die Preact-Komponente wie folgt verwendet

---
...
const count = signal(0);
...
---

<Counter count={count} client:visible>
    <h1>Hello, Preact 1!</h1>
</Counter>

In diesem Repository ist preact wie folgt definiert:

export default function Counter({ children, count }) {
    const add = () => count.value++;
    const subtract = () => count.value--;

    return (
        <>
            <div class="counter">
                <button onClick={subtract}>-</button>
                <pre>{count}</pre>
                <button onClick={add}>+</button>
            </div>
            <div class="counter-message">{children}</div>
        </>
    );
}

Jetzt möchte ich diese Komponente in eine Klasse umschreiben:

export default class Counter extends Component {
  constructor(props: any) {
    super(props);
    this.add = this.add.bind(this);
    this.subtract = this.subtract.bind(this);
  }

  add() {
    (this.props as any).count.value++;
  }

  subtract() {
    (this.props as any).count.value--;
  }

  render({ children, count }: any) {
    return (
      <>
        <div class="counter">
          <button onClick={this.subtract}>-</button>
          <button onClick={this.add}>+</button>
        </div>
        <div class="counter-message">{children}</div>
      </>
    );
  }
}

Das Problem ist, wenn ich auf + oder – klicke, passiert nichts, es scheint, dass 信号 nicht mehr funktioniert. Ich muss also etwas grundlegend falsch machen (beachten Sie, dass ich ein React NooP bin!) Für jede Hilfe wäre ich sehr dankbar!

P粉006540600
P粉006540600

Antworte allen(1)
P粉111641966

信号跟踪无法通过这样的构造函数进行。您需要切换到箭头函数并直接操作传入的信号:

export default class Counter extends Component {
  add = () => {
    this.props.count.value++;
  }

  subtract = () => {
    this.props.count.value--;
  }

  render({ children, count }: any) {
    return (
      <>
        <div class="counter">
          <button onClick={this.subtract}>-</button>
          <button onClick={this.add}>+</button>
        </div>
        <div class="counter-message">{children}</div>
      </>
    );
  }
}
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!