将 navigation.navigate 传递给子组件

2024-02-04

使用反应导航构建应用程序。我有一个从 firebase 中提取数据并在列表视图中呈现数据的父组件。列表视图渲染组件“ListName”具有 onRowPress 函数,但 this.props.navigation.navigate 未定义,因为导航不处于该子组件的状态。

我尝试了多种将导航属性传递给子级的方法,并从子级内的反应导航导入导航。什么都不起作用。

Thanks!

这是我的 rootStack 导航器:

const RootStackNavigator = StackNavigator(
  {
    Login: { screen: LoginScreen },
    Main: { screen: MainTabNavigator },
    Feedback: { screen: ProvideInstanceScreen }
  },
  {
    navigationOptions: () => ({
      //headerTitleStyle: {
        //fontWeight: 'normal',
        tabBarVisible: false,
        header: null
      //},
    }),
  }
);

这是我的父组件(其状态为 navigation.navigate)

import React from 'react';
import { ListView, StyleSheet, Text, Image } from 'react-native';
import { connect } from 'react-redux';
import _ from 'lodash';
import { MainButton, GenSection } from '../components/common';
import { namesFetch } from '../actions';
import ListName from '../components/ListName.js';

class ProvideScreen extends React.Component {

  static navigationOptions = {
    header: null,
  };


  componentWillMount() {
  //console.log('HOME HOME HOME  PRINT', this.props)
    this.props.namesFetch();

    this.createDataSource(this.props);
  }

  componentDidMount() {
    console.log('PROVIDE PROPS   PRINT', this.props)
    this.createDataSource(this.props);
  }

  componentWillReceiveProps(nextProps) {
    //nextProps are next set of props component is rendered with and this.props is still old props
    console.log('NEXT PROPS', nextProps)
    this.createDataSource(nextProps);
  }


  createDataSource({ names }) {
    var namesArray = names.map(function(a) {return [a.name, a.uid];});
    //console.log('NAMES ARRAY PRINT', namesArray)
    const ds = new ListView.DataSource({
      rowHasChanged: (r1, r2) => r1 !== r2
    });
    this.dataSource = ds.cloneWithRows(namesArray);
  }

  renderRow(user) {
    return <ListName name={user[0]} />;
  }


  render() {
    return (
      <Image
        source={require('../components/images/mainBG.png')}
        style={styles.containerStyle}>
        <Text style={styles.textStyle}>
          Provide Feedback
        </Text>
        <GenSection style={{paddingTop: 8}} />
        <ListView
          enableEmptySections
          dataSource={this.dataSource}
          renderRow={this.renderRow}
          removeClippedSubviews={false}
        />

    </Image>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    paddingTop: 15,
    backgroundColor: '#fff',
  },
  containerStyle: {
    flex: 1,
    width: undefined,
    height: undefined,
    backgroundColor:'transparent'
  },
  textStyle:
  {
    paddingTop: 20,
    paddingLeft: 12,
    fontSize: 32,
    fontWeight: '200',
    color: '#597abc'
  }
});



const mapStateToProps = state => {
  //console.log('STATE PRINT', state.feedbackInput)
  const names = _.map(state.feedbackInput, (val) => {
    return { ...val};
  });
  //console.log('NAMES PRINT', names)
  return { names };
};  //this is lodash   .map iterates over key value pairs and run function which assigns data to groups array



export default connect(mapStateToProps, { namesFetch })(ProvideScreen);

这是我的子组件(状态中没有 navigation.navigate):

import React, { Component } from 'react';
import { Text, TouchableWithoutFeedback, View } from 'react-native';
import { connect } from 'react-redux';
import { ListButton } from './common';

class ListName extends Component {
  onRowPress() {
    console.log('ON ROW PRESS  PRINT', this.props)
    this.props.navigation.navigate('Feedback', this.props);
  }

  componentDidMount() {
    //console.log('LIST NAME LIST NAME  PRINT', this.props)
  }

  render() {
    const name = this.props.name;
    //console.log('LISTNAME PRINT', name)

    return (
      <TouchableWithoutFeedback onPress={this.onRowPress.bind(this)}>
        <View>
          <ListButton>
            <Text style={styles.titleStyle}>
              {name}
            </Text>
          </ListButton>
        </View>
      </TouchableWithoutFeedback>
    );
  }
}

const styles = {
  titleStyle: {
    alignSelf: 'center',
    color: '#fff',
    fontSize: 16,
    fontWeight: '600',
  }
};


const mapStateToProps = state => {
  //console.log('NAMES PRINT', names)
  return state
};  //this is lodash   .map iterates over key value pairs and run function which assigns data to groups array


export default connect(mapStateToProps)(ListName);

基于 React 导航:https://reactnavigation.org/docs/en/connecting-navigation-prop.html https://reactnavigation.org/docs/en/connecting-navigation-prop.html

您只需将 withNavigation 导入到子组件中即可。

import { withNavigation } from 'react-navigation';

然后导出:

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

将 navigation.navigate 传递给子组件 的相关文章

  • 如何从javascript数组中获取唯一用户名的最后记录

    我有一个对象数组 例如 id 8 username peter weight 80 date 2019 10 14 id 1 username harry weight 80 date 2019 01 01 id 2 username ha
  • React Native 输入组件仅接受数值

    在React Native项目中 我有一个来自Native Base的输入组件 我希望这个组件只接受数值0 9并给这个字段默认值 我寻找了关于这个问题的其他问题 我不知道也许那些答案是针对 textInput 组件的 或者不知何故建议对我不
  • React Native:访问静态函数内的组件状态

    我有一个这样定义的组件 export class A extends Component constructor props this state scene 0 static changeScene scene this setState
  • 单击通知时反应本机导航到特定屏幕

    我正在尝试在用户单击他们收到的通知时实现导航 我已成功收到通知expo notifications并接受来自 API 的数据 路由 但当用户单击通知时无法导航到另一个屏幕 使用通知 export default useNotificatio
  • 有没有办法限制 React-Native 中 TextInput 的长度?

    我一直在尝试使我的程序不允许您在 TextInput 组件中输入超过一定数量的字符 类似于 maxLength 对于输入的工作方式 我还没有找到任何类似的 textInput 的 maxLength 有没有一种简单的方法来设置 组件的最大字
  • React Native + Redux 基本身份验证

    我正在寻找一种为我的反应本机应用程序创建基本身份验证的方法 我找不到任何反应本机应用程序的好例子 要登录 应用程序将电子邮件 密码 clientSecret 发送到我的服务器 如果OK 服务器返回accessToken refreshTok
  • jest快照测试:如何忽略jest测试结果中的部分快照文件

    问题 忽略 snap 文件测试结果的某些部分 这里的问题是 我的测试中有一些组件具有随机值 我并不真正关心测试它们 有什么办法可以忽略我的 X snap 文件的一部分吗 因此 当我将来运行测试时 它不会给我测试失败的结果 现在您还可以使用属
  • Socket.io 无法与 Android 上的 React Native 配合使用

    我最近正在学习 React Native 并且在使用 Socket IO 时遇到问题 我正在使用最新的 React Native 和 cli 刚刚更新 这是我的代码 import React Component from react imp
  • 使用 Fetch 发生超时错误 - React Native

    我有一个正在运行的用户登录功能 但是 我想在获取时加入超时错误 有没有办法设置一个 5 秒左右的计时器 这样在这个时间之后就会停止尝试获取 否则 一段时间后我就会出现红屏 提示网络错误 userLogin var value this re
  • 将 React Native 应用程序嵌入到现有的 ios/android 应用程序中

    我需要知道是否可以在现有的 ios android 应用程序中 嵌入 一个 React Native 应用程序 而不共享 React Native 应用程序代码 我们目前有一个 React Native 应用程序 它使用一些插件依赖项 并被
  • 将 async 和await 与export const 一起使用

    我无法完成这项工作 它说 await 是一个保留字 是的 当然是 而且我想使用它 怎么了 export const loginWithToken async gt return dispatch gt dispatch type SESSI
  • 为什么当我保存更改时,Expo 没有刷新?

    当我进行更改并保存它们时 模拟器中的应用程序不会刷新 我认为模拟器没有连接到 Metro 服务器 我尝试通过运行清除缓存expo r c 但这没有做任何事情 您是否尝试启用快速刷新 我遇到了同样的问题 但在启用 快速刷新 后 自动刷新再次开
  • ListView无法滚动

    正如你在所附的 GIF 中看到的 我无法滚动浏览ListView 一旦我释放鼠标 视图就会恢复到原始位置 我已经阅读了文档 似乎滚动应该只是工作 这是执行render render function return
  • 如何在react-navigation v5中使用withNavigation?

    我有一个嵌套组件 我想使用withNavigation在react navigation v5的嵌套组件中 为什么你不创建自己的带导航 import React from react import useNavigation from re
  • 如何使视频适合 React Native 中的视图?

    我在用着react native video
  • React Native 无法访问 Cloud Firestore 后端

    我之前使用的是 firebase 实时数据库 但现在想切换到 Cloud Firestore 但即使经过身份验证 也会收到以下错误 我目前正在使用 Android Simulator 尝试禁用我的实时数据库 但找不到解决方案 Firebas
  • React Hooks 常量组件与功能组件

    我理解函数组件和类组件之间的区别 但是 const 组件和函数组件之间有什么区别 e g const Home gt return div Home div To function Home return div Home div 两者都可
  • react-native-camera (android): takePictureAsync() 抛出错误

    从react native camera调用takePictureAsync 后 我收到此错误 framesToPop 1 nativeStackAndroid userInfo null message Preview is paused
  • React Native TextInput 在 Android 上打开时自动关闭

    我切换了笔记本电脑并克隆了我的项目的存储库 进行了快速的纱线安装 看起来它与主分支上的有很大的不同 但我没有打扰 因为也许这只是因为不同的节点版本 现在 每次我单击一个 TextInput 时 键盘都会立即打开和关闭 仅在 Android
  • React-native:远程调试器停止工作

    我总是在我的应用程序和真实设备上使用调试器 但今天它突然停止工作了 打开它时 我的终端中出现此错误 Error Unable to resolve module debugger ui debuggerWorker cff11639 js

随机推荐

  • 转换 Symfony2 PHP 实体对象以在 Javascript 中使用

    我正在尝试从 PHP 对象打开数据 如下所示 但我希望能够在 JavaScript 中访问此数据以在图形库中使用 有问题的对象 我需要做的是将其转换为 JSON 编码对象以在 Javascript 中使用 我尝试在 Symfony 中使用
  • 嵌套的 Angular2 异步管道如何解决?

    我对嵌套异步管道如何以及何时在 angular2 模板中解析感到有点困惑 而且文档现在的位置不是很好 所以我希望有人可以提供帮助 我有一个非常简单的 Rxjs Observable 从服务返回 通过Observable of myArray
  • 从已删除的远程分支中获取原点?

    当我做git fetch origin并且 origin 有一个已删除的分支 它似乎没有在我的存储库中更新它 当我做git branch r它仍然显示origin DELETED BRANCH 我怎样才能解决这个问题 您需要执行以下操作 g
  • ASP.NET Core Signalr 无法在 AWS 上运行

    我们有两个应用程序 服务器端 Net Core 2 0 和客户端 AngulerJs 它们托管在AWS elistic容器服务上 另外 还有一层云耀斑 此外 我们正在使用指向我们的 docker 容器的 ALB 我们的解决方案应该有一个实时
  • 在 Chrome 中清除焦点上的 HTML5 占位符属性文本

    有什么办法可以清除吗placeholder焦点上的文字Chrome Firefox 会清除焦点上的文本 但 Chrome 不会 这会让用户感到困惑的是 栏中的文本是键入的 还是占位符文本 即使我将文本颜色更改为浅灰色 我不想为此使用不必要的
  • 从对象字面量获取链接值,onchange--Javascript/HTML select

    我知道如何使用 switch case 例程操作此菜单 但我想将 switch case 更改为对象文字 A 部分知道如何获取 onchange 值并打开一个窗口 B 部分知道如何在对象中的名称 值对中查找值 但前提是给它一个硬编码名称来匹
  • cvs更新错误

    我正在使用 WinCVS 当我尝试更新模块时 我不断收到此错误 cvs 更新中止 从服务器读取 错误 1 这里的实际问题是什么以及如何解决这个问题 我遇到了这个问题和类似的问题 通过尝试 CVSROOT pserver 字符串的变体来解决
  • 二元运算符 + 的错误操作数类型

    我需要一个最多 20 位的数字 并且我正在使用 bigint 它在下面的行给了我这个错误 二元运算符 的操作数类型错误 BigInteger t new BigInteger my number getText toString my nu
  • Spring 没有独特的 bean 类型

    我在 Spring 中遇到了一个服务的两个组件的小问题 我有这个组件 Component public class SmartCardWrapper 和这个 Component public class DummySmartCardWrap
  • 使用 Symfony 和 Doctrine 调用 null 500 上的成员函数 has()

    我在设置要从以下服务文件运行的学说时遇到一些问题
  • 如何使用 root 权限在 VS Code 中调试 Go 文件?

    如何强制 Delve in VS Code 使用 root 权限 我正在尝试调试涉及 gopacket pcap 的 go 文件 hndl err pcapgo NewEthernetHandle ifname err couldn t o
  • iterrows 无法迭代 DataFrame 错误:元组对象没有属性“A”

    当我尝试迭代数据帧时 数据类型以某种方式发生了变化 dates pd date range 20130101 periods 6 df pd DataFrame np random randn 6 4 index dates columns
  • Wtf IE7 - 使用 setTimeout 的 AJAX 调用

    我已经在 Firefox Opera 和 Seamonkey 上对此进行了测试 效果很好 当谈到 Internet Explorer 7 时 它可以工作 但只能达到一定程度 我每隔几秒就会对 PHP 脚本进行一次 AJAX 调用 在 IE7
  • 如何使用 .net 紧凑框架 3.5 隐藏数据网格中的列

    我有一个使用 DataReader 作为其数据源的 DataGrid 我想隐藏数据网格的第一列 我正在使用 net 紧凑框架 3 5 我可以找到 Windows 窗体的示例 但 api 已更改得足够多 以至于它们不起作用 您可以将列样式宽度
  • 根据列值删除 Pandas 中的 DataFrame 行 - 要删除的多个值

    我有一个值列表 在 Python 列表中事先不知道 我的 Panda DataFrame 中的一列不得包含所有行 网络上的所有食谱 例如this one https stackoverflow com questions 18172851
  • 使用 Optimize R 优化向量

    我想使用 R 的优化函数构建自己的优化 目标函数是多样化比率 最大化它 希望它是正确的 div ratio lt function weight vol cov mat dr lt t weight vol sqrt t weight co
  • 当本机库不存在时,如何构建 FFI 箱的 docs.rs 文档?

    我有一个静态链接到库的 sys 箱 货物 toml package links foo 1 0 构建 rs fn main println cargo rustc link lib dylib foo 1 0 当我发布包时 docs rs无
  • 如何使用水平投影清理二值图像?

    我想使用二元过滤器从车牌中删除除文本之外的任何内容 我在每个轴上都有投影 但我不知道如何应用它 我的想法是擦除白色轮廓 这是我现在正在工作的图像 这是 X 轴上的投影 from matplotlib import pyplot as plt
  • 在 Firebase 中执行多位置更新时如何使用事务?

    在我的 Firebase 数据库中 我需要同时对两个位置进行两次写入 我对这两个位置都有规则 以确保用户在不同时写入另一个位置的情况下无法在那里写入 对这些位置之一的写入需要递增 递减 当然 这必须通过事务来完成 否则我无法保证用户不会覆盖
  • 将 navigation.navigate 传递给子组件

    使用反应导航构建应用程序 我有一个从 firebase 中提取数据并在列表视图中呈现数据的父组件 列表视图渲染组件 ListName 具有 onRowPress 函数 但 this props navigation navigate 未定义