Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何避免在安卓系统中重新购买相机?_Javascript_Reactjs_React Native - Fatal编程技术网

Javascript 如何避免在安卓系统中重新购买相机?

Javascript 如何避免在安卓系统中重新购买相机?,javascript,reactjs,react-native,Javascript,Reactjs,React Native,所以问题是我在使用react原生qrcode扫描器,当我在我的应用程序中切换标签时,Android中的QR扫描器会变黑。我阅读它是因为在安卓系统中,组件不会卸载。我不得不添加一个isFocused if语句,但它导致了整个事件的重播,这是一个糟糕的用户体验。有没有一种方法可以在不使用if语句的情况下使其更好?谢谢 import { withNavigationFocus } from 'react-navigation'; class ScannerScreen extends Compone

所以问题是我在使用react原生qrcode扫描器,当我在我的应用程序中切换标签时,Android中的QR扫描器会变黑。我阅读它是因为在安卓系统中,组件不会卸载。我不得不添加一个isFocused if语句,但它导致了整个事件的重播,这是一个糟糕的用户体验。有没有一种方法可以在不使用if语句的情况下使其更好?谢谢

import { withNavigationFocus } from 'react-navigation';

class ScannerScreen extends Component {
  ...
  const { isFocused } = this.props
  ...

  {isFocused ? 
    <QRCodeScanner
      showMarker={true} 
      vibrate={false}
      ref={(camera) => {this.state.scanner = camera}}
      cameraStyle={{overflow: 'hidden', height: QRHeight}}
      onRead={read}
      bottomContent={<BottomQRScanner/>}
    />
    :
    null
  }
}

export default withNavigationFocus(ScannerScreen)
从“反应导航”导入{withNavigationFocus};
类ScannerScreen扩展组件{
...
const{isFocused}=this.props
...
{我的注意力集中了吗?
{this.state.scanner=camera}
cameraStyle={{溢出:“隐藏”,高度:QRHeight}
onRead={read}
bottomContent={}
/>
:
无效的
}
}
使用NavigationFocus导出默认值(ScannerScreen)

好的,您可以在componentdidmount/componentwillmount&删除componentwillunmount或useeffecthook中的listner

useEffect(() => {
      const unsubscribe = navigation.addListener('willFocus', () => {
       //Your function that you want to execute
      });

      return () => {
        unsubscribe.remove();
      };
  });
或者在新版本中,只需这样做

从“react navigation”导入{NavigationEvents}

用这个

<NavigationEvents onDidFocus={() => console.log('I am triggered')} />
console.log(“我被触发”)}>

每当页面进入焦点时,将调用onDidFocus事件。

好的,您可以将此添加到componentdidmount/componentwillmount&删除componentwillunmount或useeffecthook中的listner

useEffect(() => {
      const unsubscribe = navigation.addListener('willFocus', () => {
       //Your function that you want to execute
      });

      return () => {
        unsubscribe.remove();
      };
  });
或者在新版本中,只需这样做

从“react navigation”导入{NavigationEvents}

用这个

<NavigationEvents onDidFocus={() => console.log('I am triggered')} />
console.log(“我被触发”)}>

onDidFocus事件将在页面聚焦时被调用。

嗨,我也遇到了同样的问题,所以我在模式(
react native Modal
)视图中添加了QRCodeScanner,然后显示和隐藏模式,我想这可能有助于解决您的问题。我认为您的问题与这里良好的用户体验更相关,也许看看它在本机移动应用程序中是如何处理的,然后你可以找到一种好的uxHi方法。我也有同样的问题,所以我在一个模态(
react native model
)视图中添加了QRCodeScanner,然后显示和隐藏模态,我认为这可能会帮助你解决问题。我认为你的问题更多地与良好的用户体验相关,也许看看它在本地移动应用程序中是如何处理的,然后你就可以找到一个好方法了。谢谢你的回复,我以前也这么做过,但问题是,在安卓系统中,相机会被卡住,在这种情况下,你可以检查这一点,在函数中有一个变通方法render react native camera,并将其称为onDidFocus,在它加载camera之前,你可以在加载程序状态更改时显示加载程序启用camera组件。因此,最后它与我上面的代码类似,我只是想知道有多大/著名的应用程序可以处理这个问题。谢谢你的回复谢谢你的回复,我以前也这么做过,但问题是安卓系统的摄像头会被卡住,在这种情况下,你可以检查这一点,在函数中有一个变通方法render react native camera,并将其称为onDidFocus,在它加载camera之前,你可以在加载程序状态更改时显示加载程序启用camera组件。因此,最后它与我上面的代码类似,我只是想知道有多大/著名的应用程序可以处理这个问题。谢谢大家