zoukankan      html  css  js  c++  java
  • 1-2 Mobx 入门实践之TodoList(官方Demo)

    第一步:导入模块


    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>
        );
      }
    }
     
     
    第五步,运行代码。
     
  • 相关阅读:
    poj 4005 Moles
    牛客 2C 圈圈
    牛客 2B 树 (组合计数)
    AC日记——校门外的树(增强版) 洛谷 P1276
    AC日记——寻找道路 洛谷 P2296
    AC日记——挤牛奶 洛谷 P1204
    AC日记——最大数 洛谷 P1198 [JSOI2008]
    AC日记——中位数 洛谷 P1168
    AC日记——校门外的树 洛谷 P1047
    AC日记——约瑟夫问题 codevs 1282
  • 原文地址:https://www.cnblogs.com/wujiaolong/p/8514470.html
Copyright © 2011-2022 走看看