Meteor Mantra学习教程

2023-10-18 17:50
文章标签 学习 教程 meteor mantra

本文主要是介绍Meteor Mantra学习教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这是一篇关于MantraMeteor教程Mantra是一种基于 Meteor 1.3+React和 ES2015的 Meteor应用架构,主要作用让 Meteor应用代码架构标准化,特别是前端部分,当然它对后端代码的组织也有要求。注意 Mantra 不是一个框架,而是一套如何构建Meteor App 的说明,同时也有配套的开源库来提高代码编写效率。

如果你熟悉 ReactMantra 类似于 Flux,讲究的是对数据流的控制,但是规定得更加细致。

目的

Mantra 的目的是写出更易于理解和维护的代码。它对几乎所有的情况都有一个标准,另外还为Meteor App 增加单元测试覆盖率。

和 Perl类似,JavaScript的一个难点就是同样一个问题有太多实现方式,而且可能都是最佳解决方案。所以经常是不同的人使用不同的方法。Mantra Meteor App 有一个统一的结构,遵循相同的标准,就像设计模式一样,降低大家理解代码结构的难度,确保模块之间解耦,像Flux 一样让数据单向流动,这样维护代码更加容易。

Mantra 使用的原则很有前瞻性,能够很长时间不会过时,同时也允许其他人做必要的改变。

偏重前端

现在的 Web App 的大部分代码都是在前端。后端的代码逻辑相对简单也好管理,后端的难点在于性能优化,特别是大并发的处理,数据库等。

Mantra 的核心在如何组织客户端代码。它倡导前后端代码分离,前端不用知道后端代码是如何实现的,但是可以代码共享。因为是基于React 又侧重前端,所以Mantra 很类似React 的那些标准,例如FluxRedux 等,解决的问题也类似,都是控制数据流data flow,让代码更易理解维护。如果你对React 熟悉,理解Mantra 就不难。如果理解有困难,建议多看看React 的高级用法,例如stateless/pure functionHigher Order Components 等。

Mantra 不相信Universal App,就是不相信一套前端代码适应所有终端平台。它鼓励一套后端代码,但是为每个前端平台开发单独的app 来提高用户体验,尽量通过模块化来共享代码。

 

其他 Mantra的基本介绍可以参看这篇中文翻译 http://www.jianshu.com/p/96d6b8e64c3a

下面我来详细解释 Mantra的各个部件。

 

这里介绍的顺序和文档里的不一样,主要是先从新的概念介绍。下图是一个典型的Mantra App work flow

mantra_flow.png

Application Context

应用上下文 context对所有 action和 container开放读取,所以这是你分享变量的地方。

import *as Collectionsfrom '/lib/collections';import {Meteor}from 'meteor/meteor';import {FlowRouter}from 'meteor/kadira:flow-router';import {ReactiveDict} from 'meteor/reactive-dict';import {Tracker} from 'meteor/tracker';

export default function () {

  return {

    Meteor,

    FlowRouter,

    Collections,

    LocalState:new ReactiveDict(),

    Tracker

  };

}

从上面例子中可以看出,context可以让大家少写重复的代码,又可以在不同模块之间分享变量。

Actions

处理业务逻辑的模块。包括验证,状态管理和远程数据交互。

Action 就是一个简单的函数而已,第一个参数必须是应用的上下文ContextAction 不得使用引入除了参数以外的任何变量和模块,甚至全局变量,但是可以使用库函数。

export default {

  create({Meteor, LocalState, FlowRouter}, title, content) {

    if (!title || !content) {

      return LocalState.set('SAVING_ERROR','Title & Content are required!');

    }

 

    LocalState.set('SAVING_ERROR',null);

 

    const id = Meteor.uuid();

    // There is a method stub for this in the config/method_stubs

    // That's how we are doing latency compensation

    Meteor.call('posts.create', id, title, content, (err) => {

      if (err) {

        return LocalState.set('SAVING_ERROR', err.message);

      }

    });

    FlowRouter.go(`/post/${id}`);

  },

  clearErrors({LocalState}) {

    return LocalState.set('SAVING_ERROR',null);

  }

};

UI

Mantra 只使用React 作为UI 组件。

在 UI组件内部不需要知道 App的其他任何内容,也不应该读取和修改应用的 stateUI 使用到的数据和事件应该由 props从 container传入,或者通过事件作为 action props 传入。如果 UI组件使用到本地 state,那么这个 state不应该被外部的任何组件使用,仅限于组件内部使用。

Mantra 文档里给出的代码示例:

import React from 'react';

 

const PostList = ({posts}) => (

  <div className='postlist'> 

    <ul> 

      {posts.map(post => (

        <li key={post._id}> 

          <a href={`/post/${post._id}`}>{post.title}</a> 

       </li> ))}

    </ul> 

  </div>

);

 

export default PostList;

上面的例子代码就是 React里的无状态纯函数实现,UI只负责展示界面,没有逻辑、状态等处理。

State 管理

有两种状态:本地状态(客户端)和远程状态(服务器)。本地状态不和外界发生联系;远程状态需要和外界,例如数据库同步数据。

类似 Flux里的 store概念 ,Meteor有不同的方式实现,例如 MiniMongoReactiveDict等。Mantra在这方面很灵活,没有要求用哪一种。但是还是有一些规则

. Action 里可以读写 state

. Container 里只能读 state

. UI 组件里既不能读也不能写 state,只能由props 传入

 


原文来自:简书/荆雷

这篇关于Meteor Mantra学习教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/234217

相关文章

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

Python虚拟环境终极(含PyCharm的使用教程)

《Python虚拟环境终极(含PyCharm的使用教程)》:本文主要介绍Python虚拟环境终极(含PyCharm的使用教程),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录一、为什么需要虚拟环境?二、虚拟环境创建方式对比三、命令行创建虚拟环境(venv)3.1 基础命令3

使用Node.js制作图片上传服务的详细教程

《使用Node.js制作图片上传服务的详细教程》在现代Web应用开发中,图片上传是一项常见且重要的功能,借助Node.js强大的生态系统,我们可以轻松搭建高效的图片上传服务,本文将深入探讨如何使用No... 目录准备工作搭建 Express 服务器配置 multer 进行图片上传处理图片上传请求完整代码示例

python连接本地SQL server详细图文教程

《python连接本地SQLserver详细图文教程》在数据分析领域,经常需要从数据库中获取数据进行分析和处理,下面:本文主要介绍python连接本地SQLserver的相关资料,文中通过代码... 目录一.设置本地账号1.新建用户2.开启双重验证3,开启TCP/IP本地服务二js.python连接实例1.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA