返回顶部
首页 > 资讯 > 前端开发 > VUE >怎么用React Router 4构建通用JavaScript应用
  • 445
分享到

怎么用React Router 4构建通用JavaScript应用

2024-04-02 19:04:59 445人浏览 独家记忆
摘要

这篇文章给大家分享的是有关怎么用React Router 4构建通用javascript应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。React Router 是一个在&nb

这篇文章给大家分享的是有关怎么用React Router 4构建通用javascript应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

React Router 是一个在 React 领域非常流行的库。它依靠位置栏上的请求 URL 和 浏览器的操作历史来渲染不同的页面内容来保持显示,进而将你的 app 同步到用户接口的页面上。

怎么用React Router 4构建通用JavaScript应用

新的闪闪发亮

最近,版本4的 React Router 已经进入 beta 发布阶段。损誉各半,React Router 的这一次发布是对上一版本的完整重写,这导致了很多破坏性的 api 变更。

在版本 4 的核心理念是 “声明式可组合性(declarative composability)”?—— 它包含 React 之所以优秀的组件概念,并将其应用于 routing。React Router 4 的每一个部分都是 React 的组件: Router ,  Route ,  Link 等等。

React Router 的一位开发者, Ryan Florence ,亲手制作了一个简短的视频来介绍***的 React Router,这段视频获得了很多人的推荐:

视频: https://youtu.be/a4kqMQorcnE

后台如何?

新版本的 React Router 奉上了一个新的 WEB 页面,上面有 许多实用的代码示例 ,但没有提供实例介绍如何在服务端使用 React Router 来进行基于 React 的页面的渲染。

对于我近期正在进行的项目,对搜索引擎友好且具备***的网站运行速度是重中之重,难道这样就要在客户端渲染整个页面?难道就用示例页面上所有实例所采取的办法?那是不可取的。我们要使用一个 Express 服务器来在后台对 React 页面进行渲染。

在其介绍视屏中, Ryan 有一个可以从某些 API 获取数据来初始化其状态的 App 组件, 使用的是 componentDidMount 生命周期方法。但异步数据的获取操作完毕,组件就会被更新以显示数据。

但是当要在服务端对 App 组件进行渲染的时候这样做不会有效果: 在你使用 renderToString 的时候, 带有 html 代码的字符串在调用了组件的渲染方法之后就会被同步地创建出来。 componentDidMount 从未被调用到。

因此如果我们使用 Ryan 视频里的示例在后台渲染出 App 组件,它只会生成一条 “Loading…” 消息。

解决方案

作为对概念方案的验证,我创建了一个 demo 应用,基本上就是对视频中 Ryan 的示例进行重造,但采取的是服务器端的渲染。

应用使用了 GitHub API 去获取有关于 GISt 代码片段的数据:

怎么用React Router 4构建通用JavaScript应用

代码展示

你可以在 github 上找到 demo 应用的源代码:

Https://github.com/technology-ebay-de/universal-react-router4

简而言之,下面就是我所做的事情…

server/index.js

这就是每次有 HTTP 请求发到 Express 服务器的时候都会跑一次的代码:

const routes = ['/','/g/:gistId'];

app.get('*', (req, res) => {
    const match = routes.reduce((acc, route) => matchPath(req.url, route, { exact: true }) || acc, null);if (!match) {
        res.status(404).send(render(<NoMatch />));return;
    }
    fetch('https://api.github.com/gists')
        .then(r => r.JSON())
        .then(gists => 
            res.status(200).send(render(
                (
                    <StaticRouter context={{}} location={req.url}>
                        <App gists={gists} />
                    </StaticRouter>
                ), gists
            ))
        ).catch(err => res.status(500).send(render(<Error />));
});

app.listen(3000, () => console.log('Demo app listening on port 3000'));

(注意:这里只是摘录,你可以在  GitHub  找到完整的源代码 )

在第 1&ndash;4行 , 我为 app 定义了一个路由数组。数组的***个元素就是针对主页的初始请求, 没有 Gists 被选上。第二个路由就是用来展示一个被选上的 Gist 的。

在第 6行 , 我的 Express app 被告知要处理任何可以使用星号匹配上的请求。

在第 7行 , 我使用了来自于 React Router 的  matchPath 函数对路由数组进行简省; 结果就是一个匹配对象,其拥有关于能匹配到的路由以及任何可以从 URL 路径转换过来的参数,这些信息。

在第 8&ndash;11行 , 如果有不能匹配的路由,我就渲染出一个错误页面,上面会说 : “页面没找到(Page not found)”。

这里的 render 函数只是围绕 React 的  renderToString 的一个封装而已,添加了包围 React 组件的 HTML 的基础页面的 HTML 代码 ( <html><head><body> , 等等)。

在第 12&ndash;22行 , 我会从 GitHub API 获取到可以填充 App 状态的数据,并且对 App 组件进行渲染。

最显而易见是第 17 行,我使用了 StaticRouter 组件来初始化 React Router。该 Router 组件类型是采用服务端渲染方案的***选择。它永远不会改变位置, 这是我们在本场景下所需要的, 因为是在后台上, 我们只会渲染一次,而且不会直接地对用户的交互操作做出反应。

而第 23 行 会捕获在处理期间产生的错误信息来渲染出一个错误页面。

我的 App 组件看起来像下面这样:

export default ({ gists }) => (<div><Sidebar>{
                gists ? gists.map(gist => (<SidebarItem key={gist.id}><Link to={`/g/${gist.id}`}>{gist.description || '[no description]'}</Link></SidebarItem>)) : (<p>Loading&hellip;</p>)
            }</Sidebar><Main><Route path="/" exact component={Home} />{
                gists && (<Route path="/g/:gistId" render={                         ({ match }) => (<Gist gist={gists.find(g => g.id === match.params.gistId)} />
                        )
                    } />
                )
            }</Main></div>);

(&rarr;   GitHub上有完整的源代码  )

在第 1 行 , 组件接收到作为一个属性的 Gist 数据对象。

第 3&ndash;13行 渲染了一个  Sidebar 组件,里面是连接到不同 Gist 链接。  SidebarItem  组件里面所包含的是只有在存在实际的 Gist  数据时才会被渲染的数据。在服务端,总会有这样的情况发生。而我们在服务端和客户端渲染中都会用到该组件。如果组件是在客户端被渲染的,  我们可能处在获取新的 Gist 数据这一过程之中,所以会展示出一条 “Loading&hellip;(加载中)” 的消息。

第 15行 使用了一个来自于 React Router 库的  Route 组件,用以在路由匹配到“/”这个路径的时候展示出  Home 组件。这里我们使用的是精确匹配, 不然的话任何以斜线开头的路径都会匹配到。

如果有 Gist 数据要展示的话, 那么在第 18 行 , 另外一个 Route 组件就会被用来展示一个  Gist 组件,上面是被选择的 Gist 的详细信息。

client/index.js

如前所述,这是一个 通用 JavaScript 应用(大家都知道的“同构”),意思是相同的代码即可用于渲染服务器页面,又可以用于渲染客户端页面。这里摘录了一段在客户端初始化页面的代码:

render((<BrowserRouter><App gists={window.__gists__} />
    </BrowserRouter>
), document.getElementById('app'));

(&rarr;   GitHub 上的完整代码  )

这比服务端代码简单多了! 第 1 行 的  render 函数就是  ReactDOM 的 render 函数 。它把我的 React 组件渲染出来的布局附加到 DOM 节点上。

第 2 行 使用了  BrowserRouter (代替了我在服务端进行渲染使用的 StaticRouter)。

第 3 行 我使用 gist 数据对 App 组件进行实例化,以此代替通过 GitHub API 获取数据。gist 数据来自浏览器 DOM 的全局变量,它是后端通过 <script> 标签放在那里的。

感谢各位的阅读!关于“怎么用React Router 4构建通用JavaScript应用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 怎么用React Router 4构建通用JavaScript应用

本文链接: https://lsjlt.com/news/84564.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用React Router 4构建通用JavaScript应用
    这篇文章给大家分享的是有关怎么用React Router 4构建通用JavaScript应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。React Router 是一个在&nb...
    99+
    2024-04-02
  • 如何使用React + Redux + React-router构建可扩展的前端应用
    这篇文章将为大家详细讲解有关如何使用React + Redux + React-router构建可扩展的前端应用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解...
    99+
    2024-04-02
  • 使用React-Router怎么创建一个单页应用
    使用React-Router怎么创建一个单页应用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是路由以下来自维基百科::路...
    99+
    2024-04-02
  • React Router怎么用
    这篇文章主要为大家展示了“React Router怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“React Router怎么用”这篇文章吧。React R...
    99+
    2024-04-02
  • react-router@4.0怎么用
    这篇文章主要介绍了react-router@4.0怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如果你已经是一个正在开发中的react...
    99+
    2024-04-02
  • React Router V4怎么用
    这篇文章主要为大家展示了“React Router V4怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“React Router V4怎么用”这篇文章吧。一...
    99+
    2024-04-02
  • Vue中怎么构建一个Bootstrap 4 应用
    Vue中怎么构建一个Bootstrap 4 应用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。安装和设置Bootstrap-V...
    99+
    2024-04-02
  • 怎么用JS代码构建React
    这篇文章主要讲解了“怎么用JS代码构建React”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用JS代码构建React”吧!我们将构建什么功能?&nbs...
    99+
    2024-04-02
  • 利用 JavaScript 构建命令行应用
    目录1、安装 node2、安装 Commander.js3、 JavaScript 代码中添加一个库4、JavaScript 中的选项解析5、访问命令行数据6、运行应用7、选项解析前...
    99+
    2024-04-02
  • 用JavaScript MVC架构构建动态Web应用程序:从入门到精通
    引言 在当今快速发展的互联网时代,构建动态Web应用程序的需求日益增长。MVC(模型-视图-控制器)架构是一种流行的设计模式,它可以帮助开发人员快速构建交互式、健壮的Web应用程序。JavaScript MVC框架是一种基于JavaScr...
    99+
    2024-02-12
    JavaScript MVC 框架 Web应用程序 前端开发
  • webpack如何构建react多页面应用
    这篇文章给大家分享的是有关webpack如何构建react多页面应用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。利用creat-react-app 新建一个react应用npm...
    99+
    2024-04-02
  • 怎么使用Vue和vue-router创建单页应用
    本文小编为大家详细介绍“怎么使用Vue和vue-router创建单页应用”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Vue和vue-router创建单页应用”文章能帮助大家解决疑惑,下面跟着小编...
    99+
    2024-04-02
  • React怎么应用
    这篇文章主要介绍“React怎么应用”,在日常操作中,相信很多人在React怎么应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”React怎么应用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!React...
    99+
    2023-06-27
  • go和javascript怎么构建一个即时消息应用
    这篇“go和javascript怎么构建一个即时消息应用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go和javascri...
    99+
    2023-06-16
  • 如何使用PHP和React构建现代化的Web应用
    在当今互联网时代,构建现代化的Web应用已经成为了一个必然趋势。要构建一个现代化的Web应用,不仅需要后端技术的支持,还需要前端技术的输出。PHP与React是当今很流行的技术栈之一,它们分别代表着后端与前端技术的发展趋势。那么如何使用PH...
    99+
    2023-05-24
    React PHP Web应用
  • React为什么不将Vite作为构建应用的首选
    React为什么不将Vite作为构建应用的首选?下面本篇文章就来带大家聊聊React不将Vite作为默认推荐的原因,希望对大家有所帮助!在React文档中,对于构建新的React应用,首推的方式是CRA(create-react-app)。...
    99+
    2023-05-14
    React.js Vite 前端
  • 怎么用JavaScript和jQuery构建一个BS Web的聊天应用程序
    这篇文章主要讲解了“怎么用JavaScript和jQuery构建一个BS Web的聊天应用程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用JavaS...
    99+
    2024-04-02
  • 怎么在React Router中利用history实现跳转
    这篇文章给大家介绍怎么在React Router中利用history实现跳转,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。hookimport {useHistory} from '...
    99+
    2023-06-14
  • Vue 2.0+Vue-router如何构建一个简单的单页应用
    这篇文章主要介绍Vue 2.0+Vue-router如何构建一个简单的单页应用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、介绍vue.js 是 目前 最火的前端框架,vue.j...
    99+
    2024-04-02
  • react同构应用的概念是什么
    今天小编给大家分享一下react同构应用的概念是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作