更新时间:2025-07-29 03:05:04下载pdf
NavigatorLayout 是支持导航路由的基础布局,能轻易的处理面板页面间的切换。NavigatorLayout 底层使用的 Navigator 是涂鸦设备控制面板中组织和管理多个页面之间的关联,嵌套关系,以及页面之间过渡的组件,更多关于 Navigator 的信息参考 Navigator。
NavigatorLayout 的使用步骤如下:
React组件,继承tuya-panel-kit 提供的NavigatorLayout。renderScene 方法渲染用户的页面,返回一个合法的React组件。hookRoute 方法,实现更精细的路由控制。先定义路由配置,然后编写继承自 NavigatorLayout 的组件。代码逻辑如下:
定义两个页面的路由表(routers)page1 和 page2。
在 renderScene 方法中获取 Navigator,以及当前路由对象的信息。
在渲染页面时,根据当前路由的 ID 在路由表查找相应的页面。
说明:如果没有对应的页面,则渲染默认的主页。
import React from "react";
import { StyleSheet } from "react-native";
import { NavigatorLayout } from "tuya-panel-kit";
import Page from "./page";
import Home from "./home";
const routers = [
  {
    id: "page1",
    title: "page1",
    Scene: (props) => <Page {...props} num={1} />,
  },
  {
    id: "page2",
    title: "page2",
    Scene: (props) => <Page {...props} num={2} />,
  },
];
export default class MainLayout extends NavigatorLayout {
  // eslint-disable-next-line
  hookRoute(route) {
    const theRoute = routers.find((r) => r.id === route.id);
    return {
      ...route,
      topbarStyle: { backgroundColor: "#ff6024" },
      showOfflineView: true,
      title: route.id === "main" ? "Basic Jump Usage" : theRoute.title,
    };
  }
  renderScene(route, navigator) {
    let Scene = <Home navigator={navigator} />;
    const router = routers.find((r) => r.id === route.id);
    if (router && router.Scene) {
      const Component = router.Scene;
      Scene = <Component navigator={navigator} {...route} />;
    }
    return Scene;
  }
}
创建 page 和 home 的实现。
page// page.js
import React from "react";
import { View, Text, StyleSheet } from "react-native";
import { Button } from "tuya-panel-kit";
// eslint-disable-next-line
export default ({ num, navigator }) => (
  <View style={[styles.container, styles.center]}>
    <Text style={styles.welcomeTxt}>This is Page {num}</Text>
    <Button style={styles.btnStyle} onPress={() => navigator.pop()}>
      <Text style={styles.navTxt}>Click to go back!</Text>
    </Button>
  </View>
);
home// home.js
import React from "react";
import { View, StyleSheet, Text } from "react-native";
import { Button } from "tuya-panel-kit";
// eslint-disable-next-line
export default ({ navigator }) => (
  <View style={[styles.container, styles.center]}>
    <Text style={styles.welcomeTxt}>
      Welcome to basic usage of NavigatorLayout
    </Text>
    {[1, 2].map((v) => (
      <Button
        style={styles.btnStyle}
        key={v}
        onPress={() => navigator.push({ id: `page${v}` })}
      >
        <Text style={styles.navTxt}>Go to page {v}</Text>
      </Button>
    ))}
  </View>
);
实现页面间的跳转。
Navigator 的 push 方法。pop 方法。在工程目录下运行 yarn start, 并且在 App 输入相应的调试地址后,您即可在 App 上查看页面跳转的效果。
说明:代码对应的 Demo 参见 NavigatorLayout。

默认的页面过渡动画配置
const SceneConfigs = {
  ...Navigator.SceneConfigs.HorizontalSwipeJump,
  gestures: {
    pop: {
      ...Navigator.SceneConfigs.FloatFromRight.gestures.pop,
    },
  },
};
自定义动画效果设置
自定义动画设置可以实现以下效果:
import React from 'react';
import { View, StyleSheet, Text } from 'react-native';
import { Button } from 'tuya-panel-kit';
import { Navigator } from 'react-native-deprecated-custom-components';
const sceneConfig = {
  ...Navigator.SceneConfigs.HorizontalSwipeJump,
  gestures: {
    pop: {
      ...Navigator.SceneConfigs.FloatFromRight.gestures.pop,
    },
  },
};
const RouterConfig = [
  {
    txt: `VerticalUpSwipeJump to page 1`,
    transition: {
      ...sceneConfig,
      ...Navigator.SceneConfigs.VerticalUpSwipeJump
    }
  },
  {
    txt: `SwipeFromLeft to page 2`,
    transition: {
      ...sceneConfig,
      ...Navigator.SceneConfigs.SwipeFromLeft
    }
  }
];
// eslint-disable-next-line
export default ({ navigator }) => (
  <View style={[styles.container, styles.center]}>
    <Text style={styles.welcomeTxt}>
      Screen Transition Example!
    </Text>
    {
      [1, 2].map(v => (
        <Button
          style={styles.btnStyle}
          key={v}
          onPress={() => navigator.push({
            id: `page${v}`,
            sceneConfigs: RouterConfig[v 1].transition,
          })}
        ><Text style={styles.navTxt}>{RouterConfig[v 1].txt}</Text>
        </Button>
      ))
    }
  </View>
);
VerticalUpSwipeJump 和 SwipeFromLeft 效果图

说明:自定义过渡动画详情,参考 Scene Transitions。
route 设置以下参数:
TopBar 中显示的标题。TopBar 的样式。topbarStyle  的样式是一个 JS 对象, 取值范围为 React Native 的 StyleSheet 中允许的值。ReactNative  颜色值字符串。FullView 背景样式。FullView。hideFullView 使用,允许用户渲染 FullView。TopBar。false。navigator 的 API 详情参考 Navigator Methods。说明:用户需要根据
route对象的值来决定渲染的子页面。renderScene的返回值必须是一个合法的 React 组件,将会用于渲染当前路由的页面。
hookRoute 函数用于修改 route 中用于渲染的参数值。 route 的属性和 renderScene 中的 route 是一致的,您可以自行进行自定义参数设置。
说明:以下为原始的
devInfo定义。为了便于开发者使用,涂鸦提供的 模板 中的devInfo已经进行优化处理。
devInfo 是一个普通 JS 对象,包含大量设备的信息,包括但不限于以下字段:
devId 通常和 gwId 相等。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈