如何检查 React-Native ES6 中是否安装了组件

2024-01-10

我在我的应用程序中设置一个侦听器,并在广播时使用强制更新,但它给出错误“forceUpdate 无法在未安装的组件上调用”。现在如何检查组件是否已安装isMounted()函数已被弃用。

'use strict';
var React = require('react-native');
import ExpAndroid from './ExpAndroid';
var {
  AppRegistry,
  Image,
  ListView,
  TouchableHighlight,
  StyleSheet,
  Text,
  View,
  Component,
  AsyncStorage,
  Navigator,
  DeviceEventEmitter
} = React;

var rowID;
var img=require('./resource/ic_pause_white.png');





class Example1 extends Component{
  constructor(props) {
    super(props);
    this.state = {

    };
  }
  componentWillMount(){

      rowID = this.props.rowIdentity;
      console.log("rowID "+rowID);

  }


componentDidMount(){
  console.log('component  mounted')
  this.start();

  DeviceEventEmitter.addListener('playMusicStatus', (data)=> {


   if(data.playMusic==true){

     img=require('./resource/ic_pause_white.png');
       rowID++;
        this.setState(this.state);
        ExpAndroid.someMethod1("someurl);


  }



});
}

componentWillUnmount(){
  console.log('componentwill  unmounted')
}

  start() {

    var  url = "some url";
    ToastAndroid.prepareToPlay(url,true);
}



render() {




     return (
      <Image source={require('./resource/album_back.png')} style={styles.background}>
      <Image
      source={{uri:this.state.trackDetails[rowID].thumnail_loc}}
      style={styles.thumbnail}
      />
      <View style={styles.flowRow}>
      <Text
      style={styles.titles}
      >text1 + {rowID}: </Text>
      <Text
      style={styles.titles}
      >{this.state.details[rowID].text1}</Text>
      </View>
      <View style={styles.flowRow}>
      <Text
      style={styles.titles}
      >text2 : </Text>
      <Text
      style={styles.titles}
      >{this.state.details[rowID].text2}</Text>
      </View>
      <View style={styles.flowRow}>
      <Text
      style={styles.titles}
      >Text3 : </Text>
      <Text
      style={styles.titles}
      >{this.state.Details[rowID].Text3}</Text>
      </View>
      <View style={styles.flowRow}>
      <Text
      style={styles.titles}
      >Text4 : </Text>
      <Text
      style={styles.titles}
      >{this.state.details[rowID].Text4}</Text>
      </View>


      </Image>
    );
  }
}
var styles = StyleSheet.create({

  container: {
    flex: 1,

  },
  background: {
    flex: 1,

    width: null,
    height: null,
  },

  flowRow : {
    flexDirection :'row',

  },
  flowRowPlay : {
    flexDirection :'row',
    alignSelf:'center',

  },
  backgroundImage: {
    flex: 1,
    resizeMode: 'cover', // or 'stretch'
  },

  thumbnail: {
    width: 100,
    height: 120,
    alignSelf:'center',
    margin :30
  },

  controls: {
    width: 30,
    height: 30,
    margin:20
  },


  titles: {
    fontSize: 15,
    margin:20,
    color: 'white',

  },
  timings: {
    fontSize: 12,
    margin:5,
    color: 'white',

  },
});

module.exports = Example1;

您可以在组件中自己处理这个问题:

componentDidMount() { 
  this._mounted = true;
}

componentWillUnmount() {
  this._mounted = false;
}

然后你可以检查的值this._mounted在你的听众中。

请注意,使用forceUpdate()应该避免https://facebook.github.io/react/docs/component-api.html#forceupdate https://facebook.github.io/react/docs/component-api.html#forceupdate

通常你应该尽量避免使用forceUpdate(),并且只在render()中读取this.props和this.state。这使得您的组件变得“纯粹”,并且您的应用程序变得更加简单和高效。

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

如何检查 React-Native ES6 中是否安装了组件 的相关文章

随机推荐

  • 当我调用数组中对象的属性时出现错误

    在打字稿代码中 我有一个包含对象的数组 当我调用 getUsers users 函数时 它会根据需要返回结果 但在控制台中我收到此错误 未捕获类型错误 无法读取未定义的属性 firstName 在 getUsers index js 20
  • Java:最简单的日期减法

    我创建了一个类 其中有两个字段需要是日期 start date and date passed 我一直在研究 java 中日期的最佳方式YYYY MM DD格式允许轻松进行日期减法 并能够 组成 日期 例如将来的日期 我想要它做什么的例子
  • R 中的向量化函数

    我在 R 中有这个数据集 看起来像这样 id sample int 10000 100000 replace TRUE res c 1 0 results sample res 100000 replace TRUE date exam t
  • SQLite DB 的 MIDP Java 实现

    是否有任何 SQLite db 的 MIDP 实现可用于在 MIDlet 中使用 sqlite db 而不是使用 RMS 当然 还有Floggy http floggy sourceforge net and OpenBaseMovil h
  • Gradle jacoco 代码覆盖率 - 然后在 Jenkins 中发布/显示

    我正在尝试为 Java 应用程序项目设置代码覆盖率 项目名称 新应用 项目结构 src java 源代码 src java test 单元测试 Junit 测试 it 测试 集成测试 测试 测试 验收测试 tomcat 包含tomcat启动
  • 在 wwwroot 之外提供静态文件,但在目录不存在时处理 PhysicalFileProvider

    我正在尝试从外部提供文件wwwroot还可以处理目录可能尚不存在的设置情况 例如 如果我构建了一个依赖于该目录的站点 但用户没有遵循安装说明并首先创建该目录 为了便于讨论 让我们假设我想要一个简单的网站 其中有一个页面可以读取该目录的内容并
  • 通过 ajax 调用 CouchDB 时得到空响应

    我是 CouchDB 的新手 所以请耐心等待 我有一个在虚拟机上运行的 CouchDB 实例 我可以通过浏览器通过蒲团或直接访问它 http 192 168 62 128 5984 articles hot dog 在浏览器中调用该 URL
  • Android 以编程方式关闭 Activity

    活动中与离开屏幕等效的操作是什么 就像当您按下后退按钮时 活动就会消失 如何从活动内部调用它以使其自行关闭 关于Activity finish http developer android com reference android app
  • java.lang.NoClassDefFoundError:com.dropbox.sync.android.DbxAccountManager

    请这不是重复的问题 不知道 但我已经将 jar 放入 libs 文件夹中 并且还完成了以下过程 And also 我已经检查过这个我收到 java lang classnotfoundException com mysql jdbc Dri
  • 可移植的比较和交换(原子操作)C/C++ 库?

    是否有任何小型库 可以将各种处理器的类似 CAS 的操作包装成可跨多个编译器移植的宏或函数 PS The 原子 hpp库 http www boost org doc libs 1 39 0 boost interprocess detai
  • MongooseError:Model.findOne() 不再接受 Function 的回调

    我在设置 mongoose 时遇到了问题 这是我的代码 const SlashCommandBuilder require discordjs builders const testSchema require Schemas js tes
  • Java 中的 Hbase CopyTable

    我想将一个 Hbase 表复制到另一个具有良好性能的位置 我想重用 CopyTable java 中的代码Hbase 服务器 github 页面 https github com apache hbase blob master hbase
  • Android 4.3 之前使用 SimpleDateFormat 的“ZZZZZ”(+03:00) 作为时区

    我在用着SimpleDateFormat有格式yyyy MM dd T HH mm ssZZZZZ 预期输出为 2014 08 26T13 00 14 03 00 但是 仅从 Android 4 3 开始支持 ZZZZZ 结果如下 以上4
  • 为使用 Electron 创建的应用程序签名 Windows 安装程序 (.exe)

    我有一个使用构建的简单应用程序电子框架 我使用以下方式打包了代码electron packager interactive 我还创建了一个Windows 安装程序文件可以使用 Inno Setup 编译器 单个 exe 文件 进行分发 这里
  • Angular 2 中条件必需的验证器指令

    我需要根据其他字段的值将某些表单字段设置为必需或不必需 内置的必需的验证器 https angular io docs ts latest api common RequiredValidator directive html指令似乎不支持
  • C# SecureString 问题

    有没有什么方法可以在不影响安全性的情况下获取 SecureString 的值 例如 在下面的代码中 一旦执行 PtrToStringBSTR 字符串就不再安全 因为字符串是不可变的 并且垃圾收集对于字符串来说是不确定的 IntPtr ptr
  • Android Spinner 设置选择与 2 向绑定

    当配置了 2 路数据绑定时 我正在努力获取一些与 Android spinner 一起使用的功能 我想通过 2 路数据绑定设置微调器的初始值android selectedItemPosition 微调器条目由 ViewModel 初始化并
  • 在之前更改背景颜色后禁用时,JTextField 的背景颜色不会变为“灰色”

    通常当你使用setEditable false or setEnabled false JTextField 的背景 前景色变为 灰色 但是 如果先前已使用设置背景颜色setBackground color 例如white 然后调用setE
  • 所有 Redis 命令都是异步的吗?

    我是 Redis 和 Node JS 的新手 并且一直在尝试将两者一起使用 然而 我对可以一个接一个地使用哪些功能感到有点困惑 随着数据库大小的增加 以下代码似乎同步运行 client dbsize function err numKeys
  • 如何检查 React-Native ES6 中是否安装了组件

    我在我的应用程序中设置一个侦听器 并在广播时使用强制更新 但它给出错误 forceUpdate 无法在未安装的组件上调用 现在如何检查组件是否已安装isMounted 函数已被弃用 use strict var React require