热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

服务端衬着react+mobx+webpack+express实战(同时也支撑客户端衬着)

现在绝大多数网站照样一个多页的构造,但实在一个网站已完全能够做成一个spa,比方youtube就是一个spa,近来公司项目都是采纳react+mobx服务端衬着的单页面运用的情势,

现在绝大多数网站照样一个多页的构造,但实在一个网站已完全能够做成一个spa,比方youtube就是一个spa,近来公司项目都是采纳react+mobx服务端衬着的单页面运用的情势,踩了一些坑,有一些本身的体验,所以把项目抽了出来去掉了营业代码,留了一个架子分享一下。

项目github地点

现在react主流的状况治理运用的比较多的是redux,我司之前有个项目也是react+redux,从我个人运用下来的感觉来讲,关于绝大多数的前端运用场景,mobx远比redux更适宜,更简朴运用,更轻易上手。

结果

上岸,注册

《服务端衬着react+mobx+webpack+express实战(同时也支撑客户端衬着)》

增添item到列表中

《服务端衬着react+mobx+webpack+express实战(同时也支撑客户端衬着)》

假如路由中没有的页面,处置惩罚404

《服务端衬着react+mobx+webpack+express实战(同时也支撑客户端衬着)》

怎样运用

git clone git@github.com:L-x-C/isomorphic-react-with-mobx.git
cd isomorphic-react-with-mobx
npm install

Dev (客户端衬着)

npm start
open http://localhost:3000

Production (服务端衬着)

npm run server
open http://localhost:20000

一些经常会碰到的状况

怎样在服务端猎取数据?

在每一个component中增添一个onEnter,用一个promise来处置惩罚,在这个promise中提议一个action,转变mobx中的states值

@action
static onEnter({states, pathname, query, params}) {
return Promise.all([
menuActions.setTDK(states, '列表'),
jobActions.fetchJobList(states, query)
]);
}

之所以能这么做,是因为在serverRender中有一个onEnter的预处置惩罚,会依据component的嵌套从最外层一向遍历到最里层的onEnter,并实行个中的的要领

import async from 'async';
export default (renderProps, states) => {
const params = renderProps.params;
const query = renderProps.location.query;
const pathname = renderProps.location.pathname;
let OnEnterArr= renderProps.components.filter(c => c.onEnter);
return new Promise((resolve, reject) => {
async.eachOfSeries(onEnterArr, function(c, key, callback) {
let enterFn = c.onEnter({states, query, params, pathname});
if (enterFn) {
enterFn.then(res => {
if (res) {
//处置惩罚Promise回调实行,比方上岸
res.forEach((fn) => {
if (Object.prototype.toString.call(fn) === '[object Function]') {
fn();
}
});
}
if (key === (onEnterArr.length - 1)) {
resolve();
}
callback();
}).catch(err => {
reject(err);
});
} else {
callback();
}
});
});
};

怎样在服务端设置tdk(title, description, keywords)?

这实在在上一个题目中就已涌现了,onEnter中有一个setTDK(states, t, d, k)的要领,运用他就能够设置tdk的值

怎样在服务端举行跳转?

在浏览器环境中,我们能够设置window.location.href = url来举行跳转。
但是在服务器环境中,并没有window和document这2个对象,所以我们在服务器环境中抛出一个非常,然后捕获到以后举行302跳转。
细致能够看src/helpers/location.js, 中的redirect function
他会自动推断当前环境,来挑选运用哪种跳转

import {redirect} from './helpers/location';
@action
static onEnter({states, query, params}) {
redirect('http://www.xxx.com');
}

mobx的道理及运用就不在这里做细致的引见了,网上搜一搜有许多。
我置信我们所采纳的一些要领或许并非最圆满的解法,假如有更好的欢迎来github中提issue讨论交换,互相学习~项目地点在此


推荐阅读
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文是一篇翻译文章,介绍了async/await的用法和特点。async关键字被放置在函数前面,意味着该函数总是返回一个promise。文章还提到了可以显式返回一个promise的方法。该特性使得async/await更易于理解和使用。本文还提到了一些可能的错误,并希望读者能够指正。 ... [详细]
  • 负载均衡_Nginx反向代理动静分离负载均衡及rewrite隐藏路径详解(Nginx Apache MySQL Redis)–第二部分
    nginx反向代理、动静分离、负载均衡及rewrite隐藏路径详解 ... [详细]
  • STM32 IO口模拟串口通讯
    转自:http:ziye334.blog.163.comblogstatic224306191201452833850647前阵子,调项目时需要用到低波 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
author-avatar
手机用户2602903715
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有