可编辑的固定组件
可编辑的React组件可以“固定”,也可以硬编码到SPA视图中。 这允许开发人员将与SPA编辑器兼容的组件放置到SPA视图中,并允许用户在AEM SPA编辑器中创作组件的内容。
在本章中,我们将主页视图的标题“Current Adventures”替换为Home.js
中的硬编码文本,该标题包含固定但可编辑的标题组件。 固定组件保证标题的放置,但也允许创作标题的文本,并在开发周期之外进行更改。
更新WKND应用程序
要将 Fixed 组件添加到“主页”视图:
- 创建自定义可编辑的标题组件并将它注册到项目标题的资源类型中
- 将可编辑的标题组件放在“SPA主页”视图中
创建可编辑的React标题组件
在SPA主页视图中,将硬编码文本<h2>Current Adventures</h2>
替换为自定义可编辑的标题组件。 在使用标题组件之前,我们必须:
- 创建自定义标题React组件
- 使用
@adobe/aem-react-editable-components
中的方法修饰自定义标题组件使其可编辑。 - 向
MapTo
注册可编辑的标题组件,以便稍后在容器组件中使用它。
要执行此操作:
-
在IDE中的
~/Code/aem-guides-wknd-graphql/remote-spa-tutorial/react-app
处打开远程SPA项目 -
在
react-app/src/components/editable/core/Title.js
处创建React组件 -
将以下代码添加到
Title.js
。code language-javascript import React from 'react' import { RoutedLink } from "./RoutedLink"; const TitleLink = (props) => { return ( <RoutedLink className={props.baseCssClass + (props.nested ? '-' : '__') + 'link'} isRouted={props.routed} to={props.linkURL}> {props.text} </RoutedLink> ); }; const TitleV2Contents = (props) => { if (!props.linkDisabled) { return <TitleLink {...props} /> } return <>{props.text}</> }; export const Title = (props) => { if (!props.baseCssClass) { props.baseCssClass = 'cmp-title' } const elementType = (!!props.type) ? props.type.toString() : 'h3'; return (<div className={props.baseCssClass}> { React.createElement(elementType, { className: props.baseCssClass + (props.nested ? '-' : '__') + 'text', }, <TitleV2Contents {...props} /> ) } </div>) } export const titleIsEmpty = (props) => props.text == null || props.text.trim().length === 0
请注意,此React组件尚无法使用AEM SPA编辑器进行编辑。 此基本组件将在下一步中变为可编辑。
阅读有关实施详细信息的代码注释。
-
在
react-app/src/components/editable/EditableTitle.js
处创建React组件 -
将以下代码添加到
EditableTitle.js
。code language-javascript // Import the withMappable API provided bu the AEM SPA Editor JS SDK import { EditableComponent, MapTo } from '@adobe/aem-react-editable-components'; import React from 'react' // Import the AEM the Title component implementation and it's Empty Function import { Title, titleIsEmpty } from "./core/Title"; import { withConditionalPlaceHolder } from "./core/util/withConditionalPlaceholder"; import { withStandardBaseCssClass } from "./core/util/withStandardBaseCssClass"; // The sling:resourceType of the AEM component used to collected and serialize the data this React component displays const RESOURCE_TYPE = "wknd-app/components/title"; // Create an EditConfig to allow the AEM SPA Editor to properly render the component in the Editor's context const EditConfig = { emptyLabel: "Title", // The component placeholder in AEM SPA Editor isEmpty: titleIsEmpty, // The function to determine if this component has been authored resourceType: RESOURCE_TYPE // The sling:resourceType this component is mapped to }; export const WrappedTitle = (props) => { const Wrapped = withConditionalPlaceHolder(withStandardBaseCssClass(Title, "cmp-title"), titleIsEmpty, "TitleV2") return <Wrapped {...props} /> } // EditableComponent makes the component editable by the AEM editor, either rendered statically or in a container const EditableTitle = (props) => <EditableComponent config={EditConfig} {...props}><WrappedTitle /></EditableComponent> // MapTo allows the AEM SPA Editor JS SDK to dynamically render components added to SPA Editor Containers MapTo(RESOURCE_TYPE)(EditableTitle); export default EditableTitle;
此
EditableTitle
React组件打包了Title
React组件,并将其包装和修饰为可在AEM SPA编辑器中编辑。
使用React EditableTitle组件
现在,EditableTitle React组件已在中注册并可以在React应用程序中使用,请替换“主页”视图上的硬编码标题文本。
-
编辑
react-app/src/components/Home.js
-
在底部的
Home()
中,导入EditableTitle
并将硬编码的标题替换为新的AEMTitle
组件:code language-javascript ... import EditableTitle from './editable/EditableTitle'; ... function Home() { return ( <div className="Home"> <EditableTitle pagePath='/content/wknd-app/us/en/home' itemPath='root/title'/> <Adventures /> </div> ); }
Home.js
文件应如下所示:
在AEM中创作标题组件
-
登录AEM Author
-
导航到 站点> WKND应用程序
-
点按 主页 并从顶部操作栏中选择 编辑
-
从页面编辑器右上角的编辑模式选择器中选择 编辑
-
将鼠标悬停在WKND徽标下方和冒险列表上方的默认标题文本上,直到显示蓝色编辑大纲
-
点按以显示组件的操作栏,然后点按 扳手 以进行编辑
-
创作标题组件:
-
标题: WKND冒险
-
类型/大小: H2
-
-
点按 完成 以保存
-
在AEM SPA编辑器中预览更改
-
刷新http://localhost:3000上本地运行的WKND应用程序,并立即反映所编写的标题更改。
SPA中的
恭喜!
您已将一个固定的、可编辑的组件添加到WKND应用程序! 您现在知道如何:
- 在SPA中创建了一个固定的可编辑组件
- 在AEM中创作固定组件
- 在远程SPA中查看创作的内容