zoukankan      html  css  js  c++  java
  • mobx react

    目录结构:

     Model/index.js

    'use strict';
    import { action, autorun, observable, computed } from "mobx";
    export default class TodoList {
        @observable todos = [{ title: "test", finished: true }];
        @observable data = [];
       constructor(){
        autorun(()=>{console.log(this.unfinishedTodoCount)});
       } @computed get unfinishedTodoCount() {
    return this.todos.filter(todo => !todo.finished).length; } @action getData() { fetch("http://localhost/Server/index.php").then(res => res.json()).then(data => this.data = data); } @action addList() { this.todos.push({ title: "test1", finished: false }); } }
    • @: es6新增的装饰器语法,babel已支持需要安装 babel-plugin-transform-decorators-legacy
    • 类的静态属性:es7新增的语法,babel已支持需要安装 babel-preset-stage-2
    • @observer: 让 React 组件自动起来,它会自动更新,即便是在一个很大的程序里也会工作的很好
    • @observable:监听数据,当数据发生改变的时候自动刷新视图
    • @computed: 创建自动运算的表达式。(一般用于计算)
    • @action:改变了@observable创建的数据,需要装饰action方法!(需要配合'use strict'使用,有助于更好地构建代码)(可以不适用action,但是不建议这样做)
    • autorun: 当@observable创建的数据发生改变时自动执行

    View/index.js

    import React,{Component} from "react";
    import ReactDOM from "react-dom"; 
    import {observer} from "mobx-react";
     
    import TodoList from "../Model/index";
    
    
    
    
    @observer
    class TodoListView extends Component {
        componentDidMount(){
            this.props.todoList.getData();
        }
        clickHandle(){
            this.props.todoList.addList();
        }
        render() {
            return <div>
                <ul>
                    {this.props.todoList.todos.map(todo =>
                        <TodoView todo={todo} key={todo.id} />
                    )}
                </ul>
                Tasks left: {this.props.todoList.unfinishedTodoCount}<br />
                姓名:{this.props.todoList.data.name}<br />
                年龄:{this.props.todoList.data.age}<br />
                密码:{this.props.todoList.data.pass}<br />
                <input name='name' type='button' value="按钮" onClick={this.clickHandle.bind(this)} />
            </div>
        }
    }
    
    const TodoView = observer(({todo}) =>
        <li>
            <input
                type="checkbox"
                checked={todo.finished}
                onClick={() => {return todo.finished = !todo.finished}}
            />{todo.title}
        </li>
    )
    
    const store = new TodoList();
    ReactDOM.render(<TodoListView todoList={store} />, document.getElementById('container'));

     webpack.config.js

    var webpack = require('webpack');
    var commonsPlugin = new webpack.optimize.CommonsChunkPlugin('common.js');
    
    module.exports = {
        //插件项
        // plugins: [commonsPlugin],
        //页面入口文件配置
        entry: {
            index: './View/index.js'
        },
        //入口文件输出配置
        output: {
            path: 'dist/page',
            filename: '[name].js'
        },
        module: {
            //加载器配置
            loaders: [
                { test: /.css$/, loader: 'style-loader!css-loader' },
                { test: /.js$/, loader: 'babel-loader' },
                { test: /.(png|jpg)$/, loader: 'url-loader' }
            ]
        },
    };

    .babelrc

    {
        "presets": ["react", "es2015", "stage-2"],
        "plugins": [
            "transform-decorators-legacy"
        ]
    }

    Page/index.html

    <html>
    
    <head>
        <meta charset="utf-8" />
    </head>
    
    <body>
        <div id="container"></div>
        <script src="../dist/page/index.js"></script>
    </body>
    
    </html>
  • 相关阅读:
    mysql插入中文数据变成问号怎么处理
    项目第二阶段
    项目第一阶段
    项目测试
    常用mysql操作
    常用的mysql操作
    mysql操作
    土地档案管理系统需求分析
    土地档案管理系统架构图,ER图,用例图
    Load data local infile
  • 原文地址:https://www.cnblogs.com/dudeyouth/p/6245832.html
Copyright © 2011-2022 走看看