最近写了个js版本的akka actor.,项目地址js-actor。忽然有灵感,能不能把组件也当作一个actor,大概意思是这样的:
// actor
class DialogComponent extends AbstractActor {
public render() {
return <div style={{display: this.state.display}}>{this.state.message}</div>
}
public createReceive() {
return this.receiveBuilder()
.match(Dialog, dialog => this.setState(dialog))
.build()
}
}
//message
class Dialog {
constructor(public display: "block" | "none", public message: string){}
}
dialogActor = system.actorOf(new DialogComponent())
dialogActor.tell(new Dialog("block", "hello!"))
每个组件都是一个actor,可以接收消息,也可以向其他组件(actor)发送消息。并且actor也和react是树结构的,类似这种:
http://doc.akka.io/docs/akka/current/java/guide/diagrams/arch_tree_diagram.png)
这里,解决了组件通讯的问题。
所有的actor都在system底下,包括rootActor。组件都是通过system的eventStream发送dispatch消息,这样time trivial又有了。
这个架构是不是很有趣 手动滑稽