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

相关文章

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤