更新时间:2024-06-05 03:14:35下载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
相等。该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈