Javascript 从React到Mithril 2的翻译?(减数分裂的例子)
代码是我们在中找到的一个示例。这是在React中完成的,我正在翻译成Mithril2.0.0-rc.4Javascript 从React到Mithril 2的翻译?(减数分裂的例子),javascript,reactjs,mithril.js,Javascript,Reactjs,Mithril.js,代码是我们在中找到的一个示例。这是在React中完成的,我正在翻译成Mithril2.0.0-rc.4 class App extends React.Component { constructor(props) { super(props); this.navigateTo = pageId => pipe( preventDefault, () => this.props.actions.navigateTo(pag
class App extends React.Component {
constructor(props) {
super(props);
this.navigateTo = pageId =>
pipe(
preventDefault,
() => this.props.actions.navigateTo(pageId)
);
this.state = this.props.states();
}
componentDidMount() {
const setState = this.setState.bind(this);
this.props.states.map(state => {
setState(state);
});
}
render() {
const state = this.state;
const { actions } = this.props;
const active = pageId => state.pageId === pageId ? " active" : "";
const Component = pages[state.pageId];
首先,我们只需将渲染更改为视图,但是构造函数(Mithril是一个POJO,所以我们没有它)和组件didmount?
除了将组件didmount更改为oncreate之外,这段代码在做什么?米特里尔需要它吗
const App = {
oncreate: ???
view: ({ attrs: { state, actions } }) =>
const active = pageId => state.pageId === pageId ? " active" : "";
const Component = pages[state.pageId];
使用mithril的闭包组件生成的代码更小/更简洁 正如我所看到的,组件didmount代码是不需要的
const App = (actions) => {
const navigateTo = pageId =>
pipe(
preventDefault,
() => actions.navigateTo(pageId)
)
return {
view({ attrs: { state } }) {
const active = pageId => state.pageId === pageId ? " active" : ""
const Component = pages[state.pageId]
创建/调用组件的正确方法是:
const View = App(actions) // comp. factory
m.mount(document.getElementById("app"), {
view: () => m(View, { state: states()})
})
您可以将的版本与。(Mithril gitter)@fuzetsu:“…使用oninit或闭包作为v1和v2中构造函数的等效项。”