reactjs - 将 SideNav 与 Twilio Flex Plugin v2 结合使用时出现错误 `activeView is not defined`

标签 reactjs twilio twilio-flex

我正在使用 Twilio Flex 插件在 React js 中自定义 Flex ui 版本 2 (beta.1)。我想使用新的自定义组件在侧边栏中添加一个自定义链接。

我尝试编写代码以在选择创建的侧边栏图标时将图标切换为事件状态,但出现以下错误。

Original error: "activeView is not defined"

代码如下。

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 },
    );
  }
}

预先感谢您的帮助。

最佳答案

这里的问题是 activeView 尚未在任何地方定义。根据我从 video that Jerry linked to 收集到的信息, activeView 是传递到 Flex 内组件的属性。但是,您尝试直接在 FlexPlugin 对象中使用它。

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

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 中使用它:

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 },
    );
  }
}

这样,正确的 Prop 就会传递到您的 TaskViewSidebarButton,您可以从 Prop 中提取 activeView 并使用它来渲染按钮的事件状态。

关于reactjs - 将 SideNav 与 Twilio Flex Plugin v2 结合使用时出现错误 `activeView is not defined`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73615747/

相关文章:

javascript - 如何在组件触发的函数中使用 to action?

javascript - 尝试导入错误: 'Toast' is not exported from 'react-bootstrap'

javascript - react 传递函数给 child 不工作

Twilio Flex 插件如何使用自定义路由添加新选项卡

twilio - 当客服人员将调用者置于等待状态时,如何更改音乐?

javascript - Portal/Portlet 之类的带有 Angularjs/React 的 Web 应用程序

javascript - 如何接收 Twilio 状态回调

java - 用于工单接受的 Twilio MMS

ios - 将代码推送到 github 时出现 Twilio 框架压缩问题

twilio-flex - 如何解决“警告:无效的DOM属性`fill-rule`。您是说“fillRule”吗?在Twilio Flex上