在 React Native 的 Flatlist 中使用自定义元素的参数进行导航:空参数

2024-05-05

在没有成功解决我的问题之后here https://stackoverflow.com/questions/67862370/navigation-with-parameters-from-custom-element-in-flatlist-in-react-native-erro,我必须创建一个新问题,其中包含我的所有课程。

我是本地反应新手,在弄清楚如何通过传递参数从一个类导航到另一个类时遇到问题,非常感谢您的帮助。

我想做的就是:

  1. 使用包含 CustomButton 的平面列表创建 Session
  2. 单击 CustomButton 从 SessionCreate 导航到 ItemConfig
  3. 将参数“element”传递给 ItemConfig
  4. 显示 ItemConfig 中传入的参数内容

通过此设置,一个空的“元素”将作为参数传递给 ItemConfigScreen(但不会发生错误):

app.js:

//Views

function Home({ navigation }) {
  return (
    <HomeScreen />
  );
}

function Session({ navigation }) {
  return (
    <SessionScreen />
  );
}

//subviews

function SessionCreate({ navigation }) {
  return (
    <SessionCreateScreen />
  );
}


function ItemConfig({ navigation }) {
  return (
    <ItemConfigScreen />
  );
}



//navigation stacks
const SessionStack = createStackNavigator();

function SessionStackScreen({ navigation }) {
  return (
    <SessionStack.Navigator>
      <SessionStack.Screen
        name="Session"
        component={Session}
        options={{ tabBarLabel: 'Session!'  }}
      />
      <SessionStack.Screen
        name="SessionCreate"
        component={SessionCreate}
        options={{ tabBarLabel: 'SessionCreate!' }}
      />
      <SessionStack.Screen
        name="ItemConfig"
        component={ItemConfig}
        options={{ tabBarLabel: 'ItemConfig!' }}
      />
      
    </SessionStack.Navigator>
  );
}



//Navbar Bottom
const Tab = createBottomTabNavigator();

function App() {
  return (
    <View style={[theme.colcontainer, { flexDirection: "column" }]} >
      
      <NavigationContainer>
        <Tab.Navigator
          screenOptions={({ route }) => ({
            tabBarIcon: ({ focused, color, size }) => {
              let iconName;

              if (route.name === 'Home') {
                iconName = focused ? 'home' : 'home-outline';
              } else if (route.name === 'Session') {
                iconName = focused ? 'book' : 'book-outline';
              } 

              // dynamic ionicon
              return <Ionicons name={iconName} size={size} color={color} />;
            },
          })}
       

        >
          <Tab.Screen name="Home" component={Home} />
          <Tab.Screen name="Session" component={SessionStackScreen} />
          
        </Tab.Navigator>
      </NavigationContainer>
    </View >
  );
}

export default App;

SessionScreen.js:

function SessionScreen() {
    const navigation = useNavigation();

    return (
        <View style={[theme.container, { flexDirection: "column" }]} >

                <View>
                    <TouchableOpacity onPress={() => navigation.navigate('SessionCreate')}>
                        <Text >Create Session</Text>
                    </TouchableOpacity>
                </View>

        </View >
    );
}

export default SessionScreen;

SessionCreateScreen.js:

    //data
    const sessionElements = [
        {
            id: "1",
            title: "title1"
        }
    ];
    
    
    function SessionCreateScreen() {
        const navigation = useNavigation()
    
        const renderItemConfiguration = ({ item }) => (
           <CustomButton element={item.title} onPress={() => navigation.navigate('ItemConfig', { element: 'item.title' })} />
 );
    
        return (
            
                <View style={{ flexDirection: "column", flex: 2}} >
                 
                    <SafeAreaView >
                        <FlatList
                            data={sessionElements}
                            renderItem={renderItemConfiguration}
                            keyExtractor={(item) => item.id}
                        />
                    </SafeAreaView>
    
                </View >
        );
    }
    
    
    
    export default SessionCreateScreen;

ItemConfigScreen.js:

const element = "";

function ItemConfigScreen() {

    return (
        <ScrollView >
            <View style={{ flexDirection: "column", flex: 2}} >
                <Text>Configure {element} here</Text>
            </View >
        </ScrollView>
    );

}

export default ItemConfigScreen;

任何帮助表示赞赏。


要获取 ItemConfigScreen 中的参数,您必须使用 React-navigation 包中的 useRoute 钩子。

你可以在这里读更多关于它的内容useRoute https://reactnavigation.org/docs/use-route/

import {useRoute} from '@react-navigation/native';
function ItemConfigScreen() {

const route = useRoute();

const element = route.params?.element;

    return (
        <ScrollView >
            <View style={{ flexDirection: "column", flex: 2}} >
                <Text>Configure {element} here</Text>
            </View >
        </ScrollView>
    );

}


CustomButton 中的 onPress 导航调用也存在错误,您必须传递“item.title”而不是“item.title”${item.title}那么只有实际数据才会被传递。JS 模板文字 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals

<CustomButton element={item.title} onPress={() => navigation.navigate('ItemConfig', { element: `${item.title}` })} />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 React Native 的 Flatlist 中使用自定义元素的参数进行导航:空参数 的相关文章

随机推荐

  • 从 celery 工作人员到普罗米修斯的自定义指标

    我有一些 celery 工作人员在 kubernetes 下的容器中运行 它们不会由 celery 自动缩放 并且每个都在单个进程中运行 即没有多处理 我想从他们那里获取一堆不同的指标到普罗米修斯中 我研究过 celery promethe
  • 实时数据监控:PyQtGraph

    我正在开展一个项目 我必须分析来自设备的信号 我有一个正在运行的库 它可以从设备获取数据 截至目前 我正在收集数据 然后绘制它 我有兴趣构建一个可以实时绘制图表的实时数据监视器 经过搜索 我发现 PyQtGraph 非常适合这项任务 我对
  • 如何在 Flutter 中创建网络图像列表

    我使用 Carousel Pro 包在屏幕上实现轮播 在这个 Carousel 类中它需要一个图像列表 Carousel 类的语法是 Carousel images NetworkImage https cdn images 1 mediu
  • 如何在android中使用进度条填充图像

    我正在做一个项目 它需要填充图像 意味着我想使用图像形状作为进度条 我不知道如何使用自定义进度栏 这是一个图像及其图像按钮 这是进度为 100 时的情况 这是 0 进度 您需要了解可绘制资源 可绘制资源 安卓开发者 https develo
  • python 请求上传文件

    我正在访问一个网站 并且想要上传一个文件 我用Python编写了代码 import requests url http example com files file open 1 jpg rb r requests post url fil
  • 如何在SVG中实现橡皮擦功能?

    我认为 SVG 在某些功能上比 HTML5 canvas 更好 但我无法想象一种简单的方法来实现橡皮擦功能 我有什么方法或例子吗 这是一种非常笨拙的方法 但您可以简单地用白色描边模仿标准钢笔工具
  • 通过 Travis-CI 部署到 Heroku 的问题

    在使用 Heroku 部署时 我不断收到此错误 并且在通过 Travis 运行构建后尝试部署到 Heroku 时 我一直收到几个不同的报告 No stash entries found API request failed Message
  • 为什么添加多重处理会阻止 python 找到我编译的 c 程序?

    我目前正在寻求利用多处理的力量来加速我的代码 然而 当我从 python 调用编译后的代码时遇到了一些问题 因为当编译后的文件包含任何形式的多处理时 它似乎从代码的视图中消失了 例如 使用以下测试代码 include
  • Java 从我创建的另一个类访问数组元素

    我正在使用 main 方法在类中创建一个数组 Word attempts new Word 26 Word 类中的字段是 private String attempts Word 类中的构造函数是 public Word int a att
  • 如何在没有io的情况下在windows上创建特定大小的文件?

    Windows 上是否有与 posix fallocate 等效的函数 具体来说 我正在寻找一种方法来立即 无需执行大量 IO 创建特定大小的文件 我不关心内容 我尝试过 chsize s 它确实分配了文件 但需要很长时间 如果我右键单击文
  • Swift 2 中的 segue 没有后退按钮

    我刚刚将我的项目移植到 Swift 2 一切都运行良好 除了即使是最简单的 segues 也没有后退按钮 这是我正在使用的 segue 函数的准备 override func prepareForSegue segue UIStoryboa
  • Flutter如何向用户显示FPS(每秒帧数)?

    有没有办法在 Flutter 中向用户显示 FPS 又称每秒帧数 有没有任何小部件或包 Note 我在测试期间并没有要求 FPS 截屏 Code 我不知道是否有一个包可以帮助您不断地向用户显示 FPS 但如果您想手动执行此操作 您可以尝试以
  • 如果布局中有两张卡,则第二张卡下方没有阴影/高程。为什么?

    我有2个cards在一个单一的RelativeLayout 问题是第二张卡下方没有高程或阴影 请参阅此处的屏幕截图 截屏 https i stack imgur com oOWIT jpg 这是我在 xml 文件中所做的
  • 在 Django 中创建持久数据对象

    我有一个基于 Python 的最大熵分类器 它很大 存储为 Pickle 大约需要一分钟才能反序列化 它也不是线程安全的 然而 它运行速度很快 可以在几毫秒内对样本 一个简单的 Python 字典 进行分类 我想创建一个基本的 Django
  • Android 中的布局和容器有什么区别?

    在android studio中 在设计部分 布局和容器是分开分类的 它们之间的根本区别是什么 Layouts全部直接延伸ViewGroup The Layout后缀是该组中类的类名的一部分 例如LinearLayout RelativeL
  • 反序列化时出现 Protobuf-net memcache 提供程序 null 类型错误

    我正在使用最新的 protobuf net lib 和 protobuf net memcache 提供程序 我需要序列化自定义类型 MyClass 的列表 ProtoContract public class MyClass ProtoM
  • 使用内容安全策略防止 Internet Explorer 11 上的内联 JavaScript

    是否可以使用 ASP NET WebForm 上的 CSP 来阻止 Internet Explorer 11 上的内联 JavaScript 我知道 IE 11 不支持内容安全策略级别 2 但它支持级别 1 0 我尝试了很多方法 但没有明确
  • Faker 生成奇怪的电话号码?

    因此 我使用 Laravel 创建一个数据库并对其进行播种 我遇到了一个问题 它生成一个电话号码 如下所示 635 889 5802 x45134 这会因超出数据库列的所需长度而导致问题 所以我的问题是 从实践层面来看 它为什么这样做 现实
  • Edittext:错误已解决,然后启用 Android 中的发送按钮

    我有五个 edittext 字段 它们正在检查字段并在输入错误时限制某些数据 如下代码所示 但现在如果我在 edittext 中输入错误的数据 那么它会将信息输入数据库 所以如果有错误 我想禁用该按钮任何编辑文本 错误可能出现在 1 到 5
  • 在 React Native 的 Flatlist 中使用自定义元素的参数进行导航:空参数

    在没有成功解决我的问题之后here https stackoverflow com questions 67862370 navigation with parameters from custom element in flatlist