首页 > 解决方案 > 尝试在android中捕获签名时获取`this.refs.signatureCanvas.takeSnapshotAsync is not a function`

问题描述

我正在使用react-native-signature-pad在我的 react-native 应用程序中捕获签名(仅在 Android 中,因为 ExpoPixi 不适用于 Android):

{
  Platform.OS === 'ios' ? (
    <ExpoPixi.Signature
      ref="signatureCanvas"
      style={componentStyles.expoSignature}
      strokeWidth={3}
      strokeAlpha={0.5}
    />
  ) : (
    <SignaturePad ref="signatureCanvas" style={componentStyles.expoSignature} />
  );
}

这会根据用户操作调用各种函数。一个是capture调用_onSave(),它看起来像这样:

async function _onSave() {
  const signatureImage = await this.refs.signatureCanvas.takeSnapshotAsync({
    format: 'png',
    quality: 0.1,
    result: 'file',
  });

  await this.refs.signatureCanvas.clear();

  const convertedSignature = await ImageManipulator.manipulateAsync(
    signatureImage.uri,
    [{ rotate: -90 }],
    {
      compress: 0,
      format: ImageManipulator.SaveFormat.PNG,
      base64: true,
    }
  );

  await FileSystem.deleteAsync(signatureImage.uri, { idempotent: true });
  await FileSystem.deleteAsync(convertedSignature.uri, { idempotent: true });

  if (this.props.onSave) this.props.onSave(convertedSignature.base64);

  this.setState({
    visible: false,
  });
}

结果,我得到的是:

[未处理的承诺拒绝:TypeError:this.refs.signatureCanvas.takeSnapshotAsync 不是函数。(在 'this.refs.signatureCanvas.takeSnapshotAsync({]

我正在使用async/await此功能,所以我不确定问题是什么。

注意:这不是使用 iPhone 的问题,只是使用 android,这让我更加困惑,因为两种实现最终都调用了相同的函数。

任何见解将不胜感激。

标签: androidreactjsreact-native

解决方案


推荐阅读