Files
leporello-js/docs/examples/preact/stateful.js
2025-05-30 19:59:02 +00:00

28 lines
618 B
JavaScript

import { Component } from "preact"
export const Stateful = ({ getInitialState, handlers, render }) => {
return class extends Component {
constructor() {
super()
this.compState = getInitialState()
this.handlers = Object.fromEntries(
Object.entries(handlers).map(([name, h]) => [
name,
this.makeHandler(h),
]),
)
}
makeHandler(h) {
return (...args) => {
this.compState = h(this.compState, ...args)
this.forceUpdate()
}
}
render() {
return render(this.props, this.compState, this.handlers)
}
}
}