您可以使用
Requirements::javascript()控制器中的调用或使用
<% require%>调用从模板中注入前端应用程序捆绑包。基本概念是“将Javascript(和/或CSS)捆绑添加到我的前端视图”。鉴于捆绑包在页面上可用,因此从那里开始捆绑包可以自行启动。
这是添加到主题的轻量示例:
- 添加一个主题文件夹,例如
themes/my-theme
- 通过将其添加到启用它
app/_config/theme.yml
添加一个ReactPage 布局 (注意:该布局是内容部分,而不是整个页面布局)
File: ./themes/my-theme/templates/Layout/ReactPage.ss
If you can see this, your React app hasn’t initialised yet刷新(
?flush
在浏览器中)缓存
如果您在CMS中添加一个ReactPage,然后在前端打开它,您现在应该看到消息,您的React应用尚未初始化。之所以可行,是因为SilverStripe会查找页面的继承链,以查找具有与其类名匹配的模板的页面。请注意,这包括该类的名称空间,因此,如果您的类具有一个名称空间,则
templates/Foo/Bar/Layout/ReactPage.ss例如需要使用该名称空间。
现在初始化一个演示React应用程序:
cd themes/my-theme && create-react-app js
cd js && yarn build
现在,您需要告诉SilverStripe
将主题资产“公开”,这将把它们默认链接到
public/resources目录中,以便您可以从webroot(
public/文件夹)访问它们。
# File: ./composer.json..."extra": { "expose": [ "themes/my-theme/build/static/js/bundle.js" ]}composer vendor-expose从您的根项目文件夹运行以重新公开所有资源。
最后,将需求添加到SilverStripe模板或控制器。您可以通过控制器的
init()方法或直接在模板中执行此操作:
# File: ReactPageController.php (note that this may not exist and doesn't need to necessarily)use SilverStripeViewRequirements;// ...protected function init(){ parent::init(); Requirements::javascript('themes/my-theme/js/build/static/js/main.ad956de7.chunk.js'); Requirements::javascript('themes/my-theme/js/build/static/js/2.6efc73d3.chunk.js'); Requirements::javascript('themes/my-theme/js/build/static/js/runtime~main.a8a9905a.js'); Requirements::css('themes/my-theme/js/build/static/css/main.5c68d653.chunk.css');}出于本示例的目的,我使用了由创建的文件的哈希名称
create-react-app。如果您使用一致的文件名(例如
bundle.js或类似名称),则将其集成到SilverStripe中会更容易。
您也可以在模板中执行以下操作:
# File: ./themes/my-theme/templates/Layout/ReactPage.ss...<% require javascript('themes/my-theme/js/build/static/js/main.ad956de7.chunk.js') %><% require javascript('themes/my-theme/js/build/static/js/2.6efc73d3.chunk.js') %><% require javascript('themes/my-theme/js/build/static/js/runtime~main.a8a9905a.js') %><% require css('themes/my-theme/js/build/static/css/main.5c68d653.chunk.css') %>现在加载您的浏览器,您将看到React应用程序正在运行。有点破,但就本示例而言,它足以说明如何在页面上运行React应用。



