TypeError:null 不是对象(评估 ''this.state.torchon')

Posted

技术标签:

【中文标题】TypeError:null 不是对象(评估 \'\'this.state.torchon\')【英文标题】:TypeError: null is not an object (evaluating ''this.state.torchon')TypeError:null 不是对象(评估 ''this.state.torchon') 【发布时间】:2020-06-26 03:58:20 【问题描述】:

我不知道下面的代码做错了什么...我想在相机拍摄期间打开/关闭闪光灯,但我的代码不起作用,我尝试以不同的方式绑定状态但仍然不适合我...下面是我的代码。我需要有关如何使其正常工作的帮助。

import React,  Component  from 'react';
import  View, StyleSheet, Text, TouchableOpacity  from 'react-native';
import  RNCamera  from 'react-native-camera';
import RNFetchBlob from 'rn-fetch-blob';
import Icon from 'react-native-vector-icons/Ionicons';

class cameraComponent extends Component 

    toggleTorch()

    let tstate = this.state.torchon;
    if (tstate == RNCamera.Constants.FlashMode.off)
       tstate = RNCamera.Constants.FlashMode.torch;
     else 
       tstate = RNCamera.Constants.FlashMode.off;
    
    this.setState(torchon:tstate)


    takePicture = async () => 
        if(this.camera) 
            const options =  quality: 0.5, base64: true ;
            const data = await this.camera.takePictureAsync(options);
            console.log(data.base64)
            const path = `$RNFetchBlob.fs.dirs.CacheDir/test.png`;
            console.log('path', path)
            try 
                RNFetchBlob.fs.writeFile(path, data.base64, 'base64')
            
            catch(error) 
              console.log(error.message);
            
        
    ;
  render() 
    return (
      <View style=styles.container>
          <RNCamera
            ref = ref=>
                this.camera=ref;
            
            style=styles.preview
            flashMode=this.state.torchon
            // type = RNCamera.Constants.Type.back
            
          >

          </RNCamera>
          <View style= flex: 0, flexDirection: 'row', justifyContent: 'center' >
              <TouchableOpacity onPress=this.takePicture.bind(this) style=styles.captureBtn />
          </View>

          <TouchableOpacity style=styles.toggleTorch  onPress=this.toggleTorch.bind(this)>
                 this.state.torchon == RNCamera.Constants.FlashMode.off? (
                        <Image style=styles.iconbutton source=require('../images/flashOff.png') />
                    ) : (
                        <Image style=styles.iconbutton source=require('../images/flashOn.png') />
                    )
                
            </TouchableOpacity>


          
      </View>
    );
  ;

export default cameraComponent;

【问题讨论】:

this.state.torchon 的初始值是多少? 【参考方案1】:

您尚未在任何地方初始化状态,当您访问 this.state.torchon 时,它会抛出错误,因为 this.state 为空。 你必须初始化状态。

class cameraComponent extends Component 
    this.state= torchon:RNCamera.Constants.FlashMode.off ;
    toggleTorch=()=>
    
      let tstate = this.state.torchon;
      if (tstate == RNCamera.Constants.FlashMode.off)
         tstate = RNCamera.Constants.FlashMode.torch;
       else 
        tstate = RNCamera.Constants.FlashMode.off;
      
      this.setState(torchon:tstate)
   

您也可以在构造函数中初始化状态。

【讨论】:

以上是关于TypeError:null 不是对象(评估 ''this.state.torchon')的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:null 不是对象(评估 ''this.state.torchon')

“TypeError:null 不是对象(评估‘RCTVideoInstance.Constants’)”

TypeError:null 不是对象(评估'RNRandomBytes.seed')React Native

TypeError:null 不是对象(评估'this.state.initialPosition') - React Native

TypeError:null 不是对象(评估“storagedTechs.split”)

如何解决:TypeError:null 不是对象(评估“AgoraRtcChannelModule.prefix”)?