第一步:导入模块

import React, { Component } from 'react';
import { observable, autorun,computed } from 'mobx'
import {observer} from "mobx-react";
 
 
第二步:创建store

class ObservableTodoStore{
    @observable todos = [];
    @observable pendingRequests = 0;
    constructor(){
        autorun(()=>{
            console.log(this.report);
 
 
        })
    }
    @computed get completedTodosCount() {
        return this.todos.filter(
            todo => todo.completed === true
        ).length;
    }
 
    @computed get report() {
        if (this.todos.length === 0)
            return "没有任务";
        return `下一个任务: "${this.todos[0].task}". ` +
            `进度: ${this.completedTodosCount}/${this.todos.length}`;
    }
    addTodo(task) {
        setTimeout(()=>{
            this.todos.push({
                task: task,
                completed: false,
                assignee: null
            });
        },1000)
 
    }
}
 
 
第三步:写组件TodoList  和 TodoView
 
<TodoList/>

@observer
class TodoList extends React.Component {
    onNewTodo = () => {
        this.props.store.addTodo(prompt('输入一个新的store:','wjl'));
    }
    render(){
        const store = this.props.store;
        return(
            <div>
                {store.report}
                <ul>
                    {
                        store.todos.map((todo,idx)=><TodoView todo={todo} key={idx} />)
                    }
                    { store.pendingRequests > 0 ? <marquee>Loading...</marquee> : null }
                    <button onClick={ this.onNewTodo }>New Todo</button>
                    <small> (double-click a todo to edit)</small>
                   {/* <RenderCounter />*/}
                </ul>
            </div>
        )
    }
}
 
 
<TodoView/>

class TodoView extends React.Component {
    render() {
        const todo = this.props.todo;
        return (
            <li onDoubleClick={ this.onRename }>
                <input
                    type='checkbox'
                    checked={ todo.completed }
                    onChange={ this.onToggleCompleted }
                />
                { todo.task }
                { todo.assignee
                    ? <small>{ todo.assignee.name }</small>
                    : null
                }
                {/*<RenderCounter />*/}
            </li>
        );
    }
 
    onToggleCompleted = () => {
        const todo = this.props.todo;
        todo.completed = !todo.completed;
    }
 
    onRename = () => {
        const todo = this.props.todo;
        todo.task = prompt('Task name', todo.task) || todo.task;
    }
}
 
 
第四步:加入到App组件界面显示

class App extends Component {
  render() {
    return (
      <div className="App">
          <TodoList store={ observableTodoStore } />
      </div>
    );
  }
}
 
 
第五步,运行代码。
 

1-2 Mobx 入门实践之TodoList(官方Demo)的更多相关文章

  1. CDH+Kylin三部曲之三:Kylin官方demo

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. MongoDB入门实践

    MongoDB入门实践 简单介绍MongoDB,包括MongoDB的使用场景.和MySQL的对比.安装部署.Java客户端访问及总结 MongoDB? 我们遵循需求驱动技术的原则,通过一个场景来引入M ...

  3. Spring Boot WebFlux 快速入门实践

    02:WebFlux 快速入门实践 Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot ( ...

  4. webpack的入门实践,看这篇就够了

    webpack的入门实践 我会将所有的读者概括为初学者,即使你可能有基础,学习本节之前我希望你具有一定的JavaScript和node基础 文中的 ... ...代表省略掉部分代码,和上面的代码相同 ...

  5. Spring Boot WebFlux-01——WebFlux 快速入门实践

    第01课:WebFlux 快速入门实践 Spring Boot 2.0 spring.io 官网有句醒目的话是: BUILD ANYTHING WITH SPRING BOOT Spring Boot ...

  6. 分布式学习系列【dubbo入门实践】

    分布式学习系列[dubbo入门实践] dubbo架构 组成部分:provider,consumer,registry,monitor: provider,consumer注册,订阅类似于消息队列的注册 ...

  7. sass、less和stylus的安装使用和入门实践

    刚 开始的时候,说实话,我很反感使用css预处理器这种新玩意的,因为其中涉及到了编程的东西,私以为很复杂,而且考虑到项目不是一天能够完成的,也很少是 一个人完成的,对于这种团队的项目开发,前端实践用c ...

  8. Django入门实践(三)

    Django入门实践(三) Django简单应用 前面简单示例说明了views和Template的工作过程,但是Django最核心的是App,涉及到App则会和Model(数据库)打交道.下面举的例子 ...

  9. Django入门实践(二)

    Django入门实践(二) Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Djan ...

随机推荐

  1. [C#]获取当前程序运行路径的方法集合(转)

    //获取当前进程的完整路径,包含文件名(进程名).string str = this.GetType().Assembly.Location;result: X:\xxx\xxx\xxx.exe (. ...

  2. centos mysql忘记密码找回(仅限mysql5.7)

    1.停掉mysql 2.执行#mysqld_safe --user=mysql --skip-grant-tables --skip-networking & 3.#mysql 4.updat ...

  3. Git命令行学习积累

    1.远程分支拉取到本地 $ git checkout -b develop origin/develop //检出远程的develop分支到本地 2.本地分支推送到远程 $ git checkout ...

  4. 对virtual虚方法的理解

    对virtual虚方法的理解 https://www.cnblogs.com/u3ddjw/p/6676485.html

  5. 针对SQLServer数据库的通用访问类

    Web.config中代码 <configuration> <connectionStrings> <add name="connString" co ...

  6. WPF Path 画箭头

    代码: <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.microsoft.c ...

  7. Python3.5 学习七

    心灵鸡汤 好书推荐:消费者行为学.围城.活着.盲井.三体.北京折叠 静态方法: @staticmethod #名义上归类管,和类没什么关系,只是引用用"." 在静态方法中,无法访问 ...

  8. 关于OI中简单的常数优化

    有些东西借鉴了这里qwq 1.IO(istream/ostream) 输入输出优化 之后能,在赛场上常见的几种输入输出: 输入: $1.cin$ 呵呵,不说什么了,慢的要死.大概$1e8$个数要读1分 ...

  9. android 开发 简单的小计算器

    ↑大致效果 项目构成: 随便写的,用的线性布局 activity_main.xml <?xml version="1.0" encoding="utf-8" ...

  10. 爬虫7:selenium

    1. 一个简单的使用例子 from selenium import webdriver from selenium.webdriver.common.by import By from seleniu ...