反应原生 Flatlist 导航

2023-11-27

我收到错误 类型错误:无法读取未定义的属性“导航”。我不明白如何将导航组件传递给每个子组件,因此当用户按下某个项目时,它可以使用 React Navigation 导航到 employeeEdit 组件。我是新手,如果这是显而易见的,我很抱歉。

import React, { Component } from 'react';
import { FlatList } from 'react-native';
import { connect } from 'react-redux';
//import { R } from 'ramda';
import _ from 'lodash';
import { employeesFetch } from '../actions';
import { HeaderButton } from './common';
import ListEmployee from './ListEmployee';


class EmployeeList extends Component {
  static navigationOptions = ({ navigation }) => ({
    headerRight: (
      <HeaderButton onPress={() => navigation.navigate('employeeCreate')}>
        Add
      </HeaderButton>
    )
  });

  componentWillMount() {
    this.props.employeesFetch();
  }

  keyExtractor(item) {
    return item.uid;
  }
  renderItem({ item }) {
    return <ListEmployee employee={item} navigation={this.props.navigation} />;
  }
  render() {
    return (
      <FlatList
      data={this.props.employees}
      renderItem={this.renderItem} // Only for test
      keyExtractor={this.keyExtractor}
      navigation={this.props.navigation}
      />
    );
  }
}
const mapStateToProps = (state) => {
  const employees = _.map(state.employees, (val, uid) => ({ ...val, uid }));
  return { employees };
};

export default connect(mapStateToProps, { employeesFetch })(EmployeeList);

这是 ListEmployee 的代码

import React, { Component } from 'react';
import {
  Text,
  StyleSheet,
  TouchableWithoutFeedback,
  View
} from 'react-native';
import { CardSection } from './common';

class ListEmployee extends Component {

  render() {
  const { employee } = this.props;
  const { navigate } = this.props.navigation;
  const { textStyle } = styles;
  const { name } = this.props.employee;
    return (
      <TouchableWithoutFeedback onPress={() => navigate('employeeEdit', { employee })}>
        <View>
          <CardSection>
            <Text style={textStyle}>{name}</Text>
          </CardSection>
        </View>
      </TouchableWithoutFeedback>
    );
  }
}

/**
 second argument in connect does 2 things. 1.  dispatches all actions creators
return action objects to the store to be used by reducers; 2. creates props
of action creators to be used by components
**/
export default ListEmployee;

const styles = StyleSheet.create({
  textStyle: {
    fontSize: 18,
    paddingLeft: 15,
  }
});

这是 ES6 常见的陷阱之一。别担心我的朋友,你只需学习一次就可以再次避免它们。

长话短说,当你在 React Component 中声明一个方法时,将其设置为箭头函数

所以,要从这个开始改变。

renderItem({ item }) {

to this

renderItem = ({ item }) => {

这应该可以解决您的问题,由于某些不方便的原因,如果您将方法声明为箭头函数,则只能访问“this”,但不能使用普通声明。

在您的情况下,由于 renderItem 不是箭头函数,因此“this”不引用反应组件,因此“this.props”可能是未定义的,这就是它给您这个错误的原因Cannot read property 'navigation' of undefined since

this.props.navigation = (undefined).navigation

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反应原生 Flatlist 导航 的相关文章

随机推荐

  • 在c# 3.0中,是否可以向字符串类添加隐式运算符?

    就像是 public static class StringHelpers public static char first this string p1 return p1 0 public static implicit operato
  • Angular 4 中的升序和降序排序

    为什么排序功能有效 th Transaction Date i class fa i th 虽然这个不起作用 th User i class fa i th
  • 为什么 Jquery 只影响第一个 div 元素? [复制]

    这个问题在这里已经有答案了 我正在使用 替换 函数来删除 div 中的所有非数字值 看来 Jquery 替换只影响第一个元素 这是我的 Jquery comment each function var thz this var repl t
  • 如何在 Windows 上使用 Python 的协议缓冲区?

    我一直在尝试在我的 Python 程序中使用协议缓冲区 但无法让它工作 我正在运行 Windows 8 计算机 并尝试过 Python 2 7 6 和 Python 3 3 我下载了Python的二进制protocol buffer编译器并
  • AFNetworking 2 响应错误(内容类型:text/html 而不是 JSON)

    在尝试了几乎所有关于该主题的答案之后 我都没有找到解决我的问题的有效答案 问题 所以我使用以下方法实现了我的应用程序的上传部分AFNetworking 2 0 3移植后AFNetworking 1 3 void commandWithPar
  • Code-First EF4 中的多对多关系

    如何在 EF4 Code First CTP3 中表示多对多关系 例如 如果我有以下课程 class User public int Id get set public string Name get set public ICollect
  • 如何获取 iOS 14 @main 文件中的 UIWindow 值?

    我可以访问didFinishLaunchingWithOptions通过下面的实现 但是我需要UIWindow多变的 我不知道如何得到它 我正在使用 Xcode 12 beta iOS14 SwiftUI 生命周期 import Swift
  • adb shell 命令检查 apk 是否已调试或发布签名?

    如何检查 apk 是否经过调试或发布签名 有没有直接的adb命令来验证apk签名 尝试了以下方法dumpsys and aapt命令 但我无法找到确切的标志 adb shell dumpsys package
  • AudioToolbox - 录音时的回调延迟

    最近 我一直在为 iOS 开发一个非常具体的项目 我的研究使我得到了几乎最终的代码 我已经解决了迄今为止发现的所有极端困难 但在这个问题上我似乎没有任何线索 关于原因或解决它的可能性 我设置了音频队列 采样率 44100 格式 Linear
  • 获取函数参数类型作为元组

    Problem 给定任何函数 或可调用 类型Function 如何将其所有参数类型作为元组类型获取 例如 我需要一个特质function traits
  • M_PI 为负值的 CGAffineTransformMakeRotation

    我在用着CGAffineTransformMakeRotation旋转一个UIView在动画块内 我想将其逆时针旋转180 但是当我把 myView animateWithDuration 0 5 myView transform CGAf
  • 关于 Laravel 5.1 安全性

    我是 Laravel 5 1 开发项目的新手 我想了解如何避免安全风险 Laravel 可以保护哪些类型的攻击 什么样的攻击 Laravel 是不安全的 使用中间件是处理授权的好方法 我知道 Laravel 对于 CSRF 攻击是安全的 有
  • pthread:一个 printf 语句在子线程中打印两次

    这是我的第一个 pthread 程序 我不知道为什么 printf 语句在子线程中打印两次 int x 1 void func void p x x 1 printf tid ld x is d n pthread self x retur
  • 如何从列表中删除空列表(Java)

    我已经搜索过这个 但它是用其他语言编写的 例如Python或R 我在列表中有列表 我想删除空列表 例如 abc def ghi jkl mno 我想 abc def ghi jkl mno 如何从列表中删除空列表 谢谢 你也可以尝试这个 l
  • 操作码 (APC/XCache)、Zend、Doctrine 和自动加载器

    我正在尝试使用 APC 或 XCache 作为操作码来缓存我的 php 页面 我将它与 Zend 和 Doctrine 一起使用 但自动加载器出现问题 如果我尝试使用 APC 我会得到以下信息 Fatal error spl autoloa
  • 实体框架和 SQLite,终极操作方法

    我正在尝试让 Entity Framework 6 4 4 2020 年夏季的最新版本 与 SQLite 1 0 113 1 也是 2020 年夏季的最新版本 一起工作 我找到了很多关于如何执行此操作的信息 但这些信息并不总是有帮助 它们常
  • Android 模拟器实例不显示“允许 USB 调试”确认以进行身份​​验证

    我正在尝试在 Android Studio 的 Android 模拟器中运行我的移动应用程序 当我运行该应用程序时 它会提示我选择模拟器实例 当我选择模拟器实例时 应用程序的构建将启动 并且所选的模拟器将启动 构建完成后 Android S
  • 从数据框中插入 RMySQL

    我正在尝试使用 RMySQL 将数据添加到 MySQL 表 我只需要一次添加一行 但它不起作用 我想做的就是这个 dbGetQuery con INSERT INTO names VALUES data 1 1 data 1 2 所以我正在
  • 新创建的 TFS 2010 迭代不可见

    我已经在 TFS 2010 中创建了一个新的迭代 并且不想在新的故事和查询中使用它 但是 迭代不会显示在新的故事窗口中 刷新VS 重新启动VS 切换到其他项目 没有任何帮助 我是团队项目中的项目管理员 并使用我尝试使用它的同一用户创建了迭代
  • 反应原生 Flatlist 导航

    我收到错误 类型错误 无法读取未定义的属性 导航 我不明白如何将导航组件传递给每个子组件 因此当用户按下某个项目时 它可以使用 React Navigation 导航到 employeeEdit 组件 我是新手 如果这是显而易见的 我很抱歉