Как передать обновленное состояние методу — React Native

#reactjs #react-native #bluetooth

#reactjs #react-native #bluetooth

Вопрос:

Я работаю над этим приложением, в котором я использую библиотеку Bluetooth (https://github.com/Polidea/react-native-ble-plx ) и мне нужно использовать base64 для передачи строки из пользовательского ввода в модуль Bluetooth. Я совсем новичок в React Native, так что вот мой подход к выполнению этой задачи:

  1. В конструкторе я создал новое состояние входной строки
 constructor() {
        super()
        this.manager = new BleManager()
        this.setState = {inputString: ''};
    }
 
  1. Затем я добавил способ обновления состояния inputString при вводе строки:
 <TextInput 
       style ={styles.input}
       placeholder = 'e.g. Hello'
       placeholderTextColor = 'white'
       onChangeText = {inputString => this.setState({inputString})}/>
 
  1. Затем я добавил функцию для преобразования введенной пользователем строки в base64, чтобы я мог использовать ее для метода Bluetooth для записи в модуль:
 encode = () =>{
        var encodedName = base64.encode(this.state.inputString);
        alert(encodedName);
    }
 
  1. Наконец, я хочу использовать эту новую обновленную переменную (encodedName) в методе из библиотеки Bluetooth. Метод заключается в следующем —

device.writeCharacteristicWithResponseForService(

serviceUUID: UUID,

characteristicUUID: UUID,

valueBase64: Base64)

Вот моя версия этого кода:

 device.writeCharacteristicWithResponseForService('12ab', '34cd', 'base64')
     .then((characteristic) => {
      console.log(characteristic.value);
      return })
 
  • Вот в чем моя проблема. Могу ли я просто вызвать функцию вместо ‘base64’, или есть какой-то другой способ вызвать обновленную переменную?

Заранее спасибо!

Ответ №1:

Похоже, что вместо этого вы должны передать закодированную строку в качестве третьего параметра функции записи:

 const base64Data = base64.encode(this.state.inputString);
device.writeCharacteristicWithResponseForService('12ab', '34cd', base64Data);
 

Комментарии:

1. Возможно ли, что я неправильно закодировал строку? Я получаю сообщение об ошибке, в котором говорится, что «TypeError: input.charCodeAt не является функцией. (В ‘input.charCodeAt (i )’, ‘input.charCodeAt’ не определено)» в классе base64. Спасибо за вашу помощь!

2. Хм. Когда вы console.log this.state.inputString прямо перед его кодированием, имеет ли оно правильное значение? Используете ли вы функцию encode из react-native-base64 или это другая библиотека?