Reflex 企业版 “Built with Reflex“ 角标:工作原理与关闭配置指南
Reflex 企业版 Built with Reflex 角标工作原理与关闭配置指南【免费下载链接】reflex️ Web apps in pure Python 项目地址: https://gitcode.com/GitHub_Trending/re/reflex导读Built with Reflex由 Reflex 构建角标是 Reflex 生态中一个位于页面右下角的固定徽章用于标识应用由 Reflex 构建。本篇指南以 docs/enterprise/built-with-reflex.md 为主体结合仓库源码reflex/compiler/compiler.py、reflex/app.py、packages/reflex-components-core/src/reflex_components_core/core/sticky.py与单元测试讲清角标的触发条件、显示逻辑、底层注入机制以及如何通过show_built_with_reflex配置项在 Enterprise 付费层级下将其移除。读完本文你将能精确控制角标的显示与隐藏并理解其与编译流程、部署层级之间的耦合关系。角标是什么Built with Reflex角标是使用reflex-enterprise企业组件的应用在页面右下角固定展示的一个小徽章sticky badge。它由三部分构成定义于 packages/reflex-components-core/src/reflex_components_core/core/sticky.pyStickyLogo一个简化的 Reflex R 字母 SVG 图标16×16 视图框紫色#6E56CF圆角矩形背景 白色字母路径StickyLabel文本 Built with Reflex使用 Instrument Sans 字体、0.875rem 字号、600 字重StickyBadge将 Logo 与 Label 组合成一个a链接点击后跳转到 Reflex 官网。从样式实现StickyBadge.add_style可见它的定位特征Style({ position: fixed, bottom: 1rem, right: 1rem, ... z-index: 9998, })即始终固定在视口右下角距底部、右侧各 1rem并拥有很高的z-index9998保证浮于页面内容之上。值得注意的细节是Label 被desktop_only包裹因此在移动端等窄屏上只显示 Logo不显示文字。角标何时出现默认显示逻辑角标并非无条件显示其默认行为由编译期逻辑决定实现在 reflex/compiler/compiler.pyif config.show_built_with_reflex is None: if ( get_compile_context() constants.CompileContext.DEPLOY and prerequisites.get_user_tier() in [pro, team, enterprise] ): config.show_built_with_reflex False else: config.show_built_with_reflex True if is_prod_mode() and config.show_built_with_reflex: app._setup_sticky_badge()这段代码揭示了三个关键事实默认值由编译上下文与用户层级共同决定show_built_with_reflex的默认值是None见 packages/reflex-base/src/reflex_base/config.py 的show_built_with_reflex: bool | None None。当为None时如果当前处于DEPLOY部署编译上下文且检测到用户层级为pro、team或enterprise自动置为False不显示其他情况开发模式、免费用户等一律置为True显示。仅在生产模式is_prod_mode()下注入角标开发模式下即使配置为True也不会注入角标是面向部署后用户可见产物的。show_built_with_reflex一旦被用户显式设置True或False则完全以用户设置为准不再走自动判断分支。如何关闭角标原文档给出的配置方式非常简洁需要通过reflex_enterprise包提供的Config类设置show_built_with_reflexFalseimport reflex_enterprise as rxe config rxe.Config( show_built_with_reflexFalse, # Requires paid tier )这里有几个务必注意的边界需要 Enterprise 付费层级关闭角标是 Enterprise 企业版的能力。原文档明确说明 To remove the badge, you need to be on the Enterprise tierdocs/enterprise/overview.md 的功能矩阵中也标注了该特性在云托管与自托管场景下的cloud_tier与self_hosted_tier均为Enterprise。免费用户也可使用企业组件但必须携带角标docs/enterprise/overview.md 明确提示 Free apps can use these components with a Built with Reflex badge shown in the bottom right corner of the app——即免费应用允许使用企业组件代价是角标会常驻右下角。配置字段定义该字段声明于 packages/reflex-base/src/reflex_base/config.pyWhether to display the sticky Built with Reflex badge on all pages.类型为bool | NoneNone表示交由编译期自动判断True/False表示强制显示/隐藏。环境变量与配置的先后关系配置对象创建后编译流程reflex/compiler/compiler.py会读取该值并可能改写默认值因此若你显式传入False但层级不满足角标依然无法按预期隐藏——显示与否的最终裁决权在生产编译阶段。配置文件的等价写法除 Python 代码外Reflex 的rxconfig.py中同样可以配置该字段。以rx.Config继承自BaseConfig为例等效写法是import reflex as rx config rx.Config( app_namemy_app, show_built_with_reflexFalse, )注意实际生效的付费校验与自动降级逻辑仍然以编译期用户层级prerequisites.get_user_tier()为准配置只是提供显式覆盖入口。底层实现角标如何注入到每一页show_built_with_reflexTrue且处于生产模式时编译器调用app._setup_sticky_badge()其实现位于 reflex/app.pydef _setup_sticky_badge(self): Add the sticky badge to the app. from reflex_base.components.memo import memo memo def memoized_badge() - Component: sticky_badge sticky() sticky_badge._add_style_recursive({}) return sticky_badge self.app_wraps[0, StickyBadge] lambda _: memoized_badge()这段代码的关键信息通过app_wraps应用级包装组件注册表以(0, StickyBadge)为键注册包装组件使角标被包裹到应用的所有页面之上从而实现所有页面右下角都出现的效果使用memo装饰器将角标组件记忆化memoize避免在多页面下重复渲染、降低编译与前端开销_add_style_recursive({})用于强制展开并固化角标的样式确保内联样式在最终编译产物中完整保留。角标的链接行为与 referrer 参数角标是一个可点击链接其目标地址由_badge_href()函数计算packages/reflex-components-core/src/reflex_components_core/core/sticky.pyreferrer environment.REFLEX_REFERRER_PARAM.get() if referrer: return fhttps://reflex.dev/?ref{urllib.parse.quote(referrer, safe)} return https://reflex.dev即默认跳转到https://reflex.dev如果设置了REFLEX_REFERRER_PARAM环境变量定义于 packages/reflex-base/src/reflex_base/environment.py注释明确说明该值会在编译期被读取并追加为?refurlencoded参数则跳转到https://reflex.dev/?ref值用于追踪流量来源。这一行为有完整的单元测试覆盖见 tests/units/reflex_components_core/core/test_sticky.py场景设置期望 href未设置 referrer删除REFLEX_REFERRER_PARAMhttps://reflex.dev简单 referrerREFLEX_REFERRER_PARAMowner-123https://reflex.dev/?refowner-123特殊字符 referrerREFLEX_REFERRER_PARAMa bc/d?efhttps://reflex.dev/?refa%20b%26c%2Fd%3Fe%3DfURL 编码空字符串 referrerREFLEX_REFERRER_PARAMhttps://reflex.dev回退默认与 Enterprise 组件的关系Built with Reflex角标是 Reflex Enterprise 生态的一部分。docs/enterprise/overview.md 说明reflex-enterprise是构建于 Reflex 之上的付费特性包安装方式为pip install reflex-enterprise该包必须与reflex一同安装才能使用企业特性。角标是免费使用企业组件的交换条件——免费应用在右下角展示角标付费Enterprise用户可通过show_built_with_reflexFalse移除。功能矩阵中该特性被归入Configuration配置类特性与use_single_port单端口部署代理并列。常见问题与排查建议配置了False但角标仍在检查是否处于生产模式is_prod_mode()开发模式下角标根本不会被注入问题通常出在部署产物同时确认编译上下文为 DEPLOY 且用户层级满足 Enterprise 要求自动降级逻辑reflex/compiler/compiler.py只有在层级满足时才会将默认值置为False。只想在部分页面显示角标从源码结构看角标通过app_wraps全局注入到所有页面当前实现不支持按路由粒度控制显示若需此能力可自行用sticky组件sticky()、sticky.label、sticky.logo暴露于StickyNamespace在指定页面手动放置。移动端看不到文字这是预期行为StickyLabel被desktop_only包裹窄屏下仅渲染 Logo 图标。如何自定义角标跳转链接设置环境变量REFLEX_REFERRER_PARAM编译期读取即可让角标链接携带?refurlencoded 值参数便于渠道归因统计。小结Built with Reflex角标是 Reflex 生态中连接免费使用企业组件与品牌归属的关键机制它以固定定位 高z-index的 SVG 徽章形式出现在所有页面右下角默认显示逻辑由编译上下文与用户层级自动推导生产模式下通过app_wrapsmemo注入到全站页面Enterprise 用户通过rxe.Config(show_built_with_reflexFalse)即可关闭。理解 reflex/compiler/compiler.py 中的自动判断逻辑与 reflex/app.py 的注入机制是排查角标显示异常、以及正确规划企业版部署的第一步。【免费下载链接】reflex️ Web apps in pure Python 项目地址: https://gitcode.com/GitHub_Trending/re/reflex创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考