Kri*_*ero 4 deep-linking react-native react-navigation
我正在开发一个应用程序,它有一个类别屏幕,其中显示该类别的相关帖子。我正在使用反应导航在屏幕之间导航并处理深层链接。类别屏幕可以在应用程序内或通过深层链接访问。要通过深层链接访问类别屏幕,我正在使用类似myapp://category/:id.
如果应用程序已打开并且专注于类别屏幕,则深层链接不会执行任何操作。
我目前已经使用componentDidUpdate生命周期方法“修复”了它,以比较存储在状态中的 ID 和navigation.getParam.
componentDidUpdate = () => {
const { navigation } = this.props;
const { categoryID } = this.state;
const paramID = navigation.getParam('id', null);
if (paramID !== categoryID) {
this.setState({ categoryID: paramID }, () => {
// fetch data
});
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说似乎是一个肮脏的修复。有更好的方法吗?也许使用推送打开所有深层链接而不是通过反应导航进行导航?
对于像我这样来到这里想知道如何做到这一点的人,这里是解决方案:
您可以使用该getId Stack.Screen财产。您只需从属性返回唯一的 ID 即可getId。这是一个例子:
假设我们有一个UserScreen组件,它是导航器的一部分Stack。有UserScreen一个路由参数:userId。我们可以像这样使用getId该属性:
import { createStackNavigator } from '@react-navigation/stack';
const Stack = createStackNavigator();
const AppStack = () => {
const getUserRouteId = ({ params }) => {
return params && params.userId;
};
return (
<Stack.Navigator>
{/* Other routes */}
<Stack.Screen name="User" component={UserScreen} getId={getUserRouteId} />
</Stack.Navigator>;
);
};
Run Code Online (Sandbox Code Playgroud)
现在,当您尝试使用该功能正常导航到此路线时navigate,如果导航操作中的参数与您当前所在的userId参数不同,它会将您导航到新的用户屏幕。React Navigation 深度链接在内部使用该函数。UserScreennavigate
| 归档时间: |
|
| 查看次数: |
1993 次 |
| 最近记录: |