首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用SideNav和Twilio插件v2时,未定义错误` `activeView‘

在使用SideNav和Twilio插件v2时,未定义错误` `activeView‘
EN

Stack Overflow用户
提问于 2022-09-06 00:53:45
回答 1查看 58关注 0票数 1

我正在使用Twilio插件来自定义react中的Flex版本2 (beta.1)。我想在边栏中添加一个自定义链接,其中包含一个新的自定义组件。

当选中创建的侧栏图标时,我尝试编写代码将图标切换为Active,但我得到了以下错误。

原始错误:"activeView未定义“

代码如下。

代码语言:javascript
复制
import React from 'react';
import { FlexPlugin } from '@twilio/flex-plugin';
import TaskView from './components/TaskView/TaskView';
import { SideLink, Actions } from '@twilio/flex-ui';

const PLUGIN_NAME = 'TaskViewPlugin';

export default class TaskViewPlugin extends FlexPlugin {
  constructor() {
    super(PLUGIN_NAME);
  }

  /**
   * This code is run when your plugin is being started
   * Use this to modify any UI components or attach to the actions framework
   *
   * @param flex { typeof import('@twilio/flex-ui') }
   */
  async init(flex, manager) {
    flex.ViewCollection.Content.add(
      <flex.View name='taskView' key='TaskViewPlugin-component'>
        <TaskView key='TaskViewPlugin-component' />
      </flex.View>,
    );

    flex.SideNav.Content.add(
      <SideLink
        key='taskViewSideLink'
        icon='Supervisor'
        iconActive='SupervisorBold'
        isActive={activeView === 'taskView'}
        onClick={() =>
          Actions.invokeAction('NavigateToView', { viewName: 'TaskView' })
        }
      >
        Pending Tasks
      </SideLink>,
      { sortOrder: 2 },
    );
  }
}

提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-06 02:24:42

这里的问题是activeView在任何地方都没有定义。根据我从曾傑瑞链接的视频中收集到的信息,activeView是传递给Flex中组件的一个属性。但是,您正试图在FlexPlugin对象中直接使用它。

相反,您应该创建一个返回新SideLink组件的自定义组件,如下所示:

代码语言:javascript
复制
import React from 'react';
import { SideLink, Actions } from '@twilio/flex-ui';

const TaskViewSidebarButton = ({ activeView } => {
  return <SideLink
           key='taskViewSideLink'
           icon='Supervisor'
           iconActive='SupervisorBold'
           isActive={activeView === 'taskView'}
           onClick={() =>
             Actions.invokeAction('NavigateToView', { viewName: 'TaskView' })
           }
         >
           Pending Tasks
         </SideLink>;
});

export default TaskViewSidebarButton;

然后在插件中您可以导入这个TaskViewSidebarButton组件并在SideNav.Content中使用它。

代码语言:javascript
复制
import React from 'react';
import { FlexPlugin } from '@twilio/flex-plugin';
import TaskView from './components/TaskView/TaskView';
import TaskViewSidebarButton from './components/TaskView/TaskViewSidebarButton';

const PLUGIN_NAME = 'TaskViewPlugin';

export default class TaskViewPlugin extends FlexPlugin {
  constructor() {
    super(PLUGIN_NAME);
  }

  /**
   * This code is run when your plugin is being started
   * Use this to modify any UI components or attach to the actions framework
   *
   * @param flex { typeof import('@twilio/flex-ui') }
   */
  async init(flex, manager) {
    flex.ViewCollection.Content.add(
      <flex.View name='TaskView' key='TaskViewPlugin-component'>
        <TaskView key='TaskViewPlugin-component' />
      </flex.View>,
    );

    flex.SideNav.Content.add(
      <TaskViewSidebarButton key="task-view-sidebar-button" />,
      { sortOrder: 2 },
    );
  }
}

这样,正确的道具将传递给您的TaskViewSidebarButton,您可以从道具中提取activeView并使用它呈现按钮的活动状态。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73615747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档