如果一张图片值一千个字,那么一个交互式演示一定值......一百万?
您喜欢滚动浏览流行语来了解应用程序的用途吗?可能不会。我并不想为我最新的热情项目《Wanna》写那么多废话。因此,我寻求了一个更有趣的解决方案:将我的应用程序嵌套在自己的登陆页面中,供用户探索!
执行
感谢 React 的可组合性,我们几乎简单地渲染我们的根 App 组件并收工:
export const InteractiveDemo = () => { return ( <app></app> ) }
但是,您会遇到一些问题:
- 演示应用程序的导航将导航到真实应用程序
- 演示应用程序将检索真实数据,这可能会失败或无法很好地展示它
- 用户可能不清楚他们正在看什么
让我们解决这些问题。想要使用 React Router v6 和 Apollo GraphQL,但无论技术如何,这些概念都适用。
导航
为了将演示应用程序的导航与真实应用程序分开,我们将其包装在另一个导航提供程序中:
+import { MemoryRouter, UNSAFE_LocationContext } from 'react-router' export const InteractiveDemo = () => { return ( + // Hack to nest MemoryRouter inside BrowserRouter. + // https://github.com/remix-run/react-router/issues/7375 + <unsafe_locationcontext.provider value="{null}"> + <memoryrouter initialentries="{['/app']}"> <app></app> + </memoryrouter> + </unsafe_locationcontext.provider> ) }
请注意,我们使用 MemoryRouter,以便在演示内部导航时浏览器保持在同一页面上。
数据
为了向演示应用程序提供虚假数据,我们使用 useState 在客户端应用程序内维护一个虚假的“后端”,并通过模拟客户端或服务器(取决于实现)为其提供服务。它对应用程序代码的其余部分影响最小,甚至允许我们使用演示进行手动测试 - 在快速迭代时非常方便。
我使用了mock-apollo-client;对于 REST 或 tRPC,您可以使用类似 nock 的东西。它们用于自动化测试,但正是我们所需要的。
首先,我们创建一个模拟客户端,其请求处理程序以模仿真实后端的方式查询和改变演示数据:
import { InMemoryCache } from '@apollo/client' import { createMockClient, createMockSubscription } from 'mock-apollo-client' import { useMemo, useState } from 'react' // GraphQL documents that our client sends to the real server import GET_FRIENDS from '../../gql/getFriends.gql' import ADD_FRIEND from '../../gql/addFriend.gql' // Simplified example export const useDemoClient = () => { const [friends, setFriends] = useState[{ __typename: 'User', id: 1, name: 'Nick', }] // Cache should persist across clients const cache = useMemo(() => { // Should be the same cache configuration you provide to your real Apollo client return new InMemoryCache() }, []) // We need to recreate the mock client whenever the data changes // because it doesn't support resetting request handlers. const mockClient = useMemo(() => { const client = createMockClient({ cache }) client.setRequestHandler(GET_FRIENDS, () => Promise.resolve({ data: { friends: friends } })) client.setRequestHandler(ADD_FRIEND, ({ user }) => { setFriends((prev) => prev.concat([user])) return Promise.resolve({ data: { addFriend: user } }) }) return client }, [friends]) return mockClient }
然后就像我们对导航所做的那样,我们使用模拟客户端将演示包装在新的提供程序中:
+import { ApolloProvider } from '@apollo/client' export const InteractiveDemo = () => { + const demoClient = useDemoClient() return ( + <apolloprovider client="{demoClient}"> <unsafe_locationcontext.provider value="{null}"> <memoryrouter initialentries="{['/app']}"> <app></app> </memoryrouter> </unsafe_locationcontext.provider> + </apolloprovider> ) }
如果您使用模拟服务器,则可以将其 URL 注入演示应用程序的真实客户端。
视觉效果
它有效!现在我们如何让用户清楚地知道他们正在观看交互式演示?
想要移动优先,所以我选择在手机框架内渲染演示。我使用 devices.css 因为它提供了我认为看起来最好的设备(即最小边框以最大化演示空间)。但为了简单起见,这里我们将使用一个支持 React 开箱即用的库:react-device-frameset。
我们还可以使用缩放来缩小演示 UI,并将其很好地嵌套在页面的其余部分中。在 Wanna 中,当使用
export const InteractiveDemo = () => { return ( <app></app> ) }
以上是立即吸引用户:在 React SPA 中嵌入交互式演示的详细内容。更多信息请关注PHP中文网其他相关文章!

Python和JavaScript的主要区别在于类型系统和应用场景。1.Python使用动态类型,适合科学计算和数据分析。2.JavaScript采用弱类型,广泛用于前端和全栈开发。两者在异步编程和性能优化上各有优势,选择时应根据项目需求决定。

选择Python还是JavaScript取决于项目类型:1)数据科学和自动化任务选择Python;2)前端和全栈开发选择JavaScript。Python因其在数据处理和自动化方面的强大库而备受青睐,而JavaScript则因其在网页交互和全栈开发中的优势而不可或缺。

Python和JavaScript各有优势,选择取决于项目需求和个人偏好。1.Python易学,语法简洁,适用于数据科学和后端开发,但执行速度较慢。2.JavaScript在前端开发中无处不在,异步编程能力强,Node.js使其适用于全栈开发,但语法可能复杂且易出错。

javascriptisnotbuiltoncorc; saninterpretedlanguagethatrunsonenginesoftenwritteninc.1)javascriptwasdesignedAsalightweight,解释edganguageforwebbrowsers.2)Enginesevolvedfromsimpleterterterpretpreterterterpretertestojitcompilerers,典型地提示。

JavaScript可用于前端和后端开发。前端通过DOM操作增强用户体验,后端通过Node.js处理服务器任务。1.前端示例:改变网页文本内容。2.后端示例:创建Node.js服务器。

选择Python还是JavaScript应基于职业发展、学习曲线和生态系统:1)职业发展:Python适合数据科学和后端开发,JavaScript适合前端和全栈开发。2)学习曲线:Python语法简洁,适合初学者;JavaScript语法灵活。3)生态系统:Python有丰富的科学计算库,JavaScript有强大的前端框架。

JavaScript框架的强大之处在于简化开发、提升用户体验和应用性能。选择框架时应考虑:1.项目规模和复杂度,2.团队经验,3.生态系统和社区支持。

引言我知道你可能会觉得奇怪,JavaScript、C 和浏览器之间到底有什么关系?它们之间看似毫无关联,但实际上,它们在现代网络开发中扮演着非常重要的角色。今天我们就来深入探讨一下这三者之间的紧密联系。通过这篇文章,你将了解到JavaScript如何在浏览器中运行,C 在浏览器引擎中的作用,以及它们如何共同推动网页的渲染和交互。JavaScript与浏览器的关系我们都知道,JavaScript是前端开发的核心语言,它直接在浏览器中运行,让网页变得生动有趣。你是否曾经想过,为什么JavaScr


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具