更新时间: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 相等。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈